<?php
// api/submit_task.php - 截圖地窖接收引擎 (自我修復與嚴格 JSON 版)

// 🐘 強制關閉 PHP 畫面的錯誤提示，避免破壞 JSON 格式導致前端 "連線異常"
ini_set('display_errors', 0);
error_reporting(E_ALL);

header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

require_once 'db.php';

try {
    // 1. 接收前端傳來的文字參數
    $user_id = isset($_POST['user_id']) ? intval($_POST['user_id']) : 0;
    $task_id = isset($_POST['task_id']) ? intval($_POST['task_id']) : 0;

    if (!$user_id || !$task_id) {
        throw new Exception("任務或使用者身分遺失");
    }

    // 2. 🛡️ 屠龍刀防刷：檢查是否已經上傳過了？
    $stmt = $pdo->prepare("SELECT id FROM task_submissions WHERE user_id = ? AND task_id = ?");
    $stmt->execute([$user_id, $task_id]);
    if ($stmt->fetch()) {
        throw new Exception("您已經上傳過此任務的截圖，請勿重複提交！");
    }

    // 3. 檢查圖片是否成功傳達
    if (!isset($_FILES['proof_image']) || $_FILES['proof_image']['error'] !== UPLOAD_ERR_OK) {
        throw new Exception("伺服器未能成功接收圖片，錯誤碼: " . ($_FILES['proof_image']['error'] ?? '未知'));
    }

    // 4. 📁 自動建立上傳資料夾 (自我修復機制)
    // 注意：PHP 在 api/ 裡面，所以我們要退回上一層建立 uploads/
    $upload_dir = '../uploads/';
    if (!is_dir($upload_dir)) {
        if (!mkdir($upload_dir, 0777, true)) {
            throw new Exception("無法建立 uploads 資料夾，請檢查伺服器權限 (0777)");
        }
    }

    // 5. 重新命名圖片 (任務ID_用戶ID_時間戳.jpg)，避免檔名衝突
    $new_filename = 'proof_' . $task_id . '_' . $user_id . '_' . time() . '.jpg';
    $target_path = $upload_dir . $new_filename;

    // 6. 把暫存檔搬移到正式資料夾
    if (!move_uploaded_file($_FILES['proof_image']['tmp_name'], $target_path)) {
        throw new Exception("圖片存檔失敗，請檢查伺服器的磁碟空間或資料夾寫入權限");
    }

    // 7. 🗄️ 寫入資料庫的地窖紀錄 (路徑存為 uploads/檔名)
    $db_filepath = 'uploads/' . $new_filename;
    
    // 假設我們有 created_at，如果資料表沒有，這行也不會報錯導致頁面全毀 (因為 try-catch 會捕捉)
    $sql = "INSERT INTO task_submissions (task_id, user_id, proof_img, status) VALUES (?, ?, ?, 'pending')";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$task_id, $user_id, $db_filepath]);

    // 8. 成功回報
    echo json_encode(["status" => "success", "message" => "上傳成功！等待天啟者審核中..."]);

} catch (Exception $e) {
    // 只要有任何錯誤，都會變成漂亮的 JSON 傳給前端，不再顯示 "連線異常"
    echo json_encode(["status" => "error", "message" => $e->getMessage()]);
}
?>