<?php
require_once "../connection.php";
header("Content-Type: application/json");

$player_code = $_POST['player_code'] ?? null;
$target_id   = $_POST['target_id'] ?? null;
// แก้จาก intval เป็น floatval เพื่อรองรับทศนิยม (เช่น 5.500 วินาที)
$time        = floatval($_POST['time'] ?? 0); 

if (!$player_code) {
    echo json_encode(["success" => false, "message" => "No player_code"]);
    exit;
}

/* 1) หา player ที่กำลังแข่ง */
$stmt = $conn->prepare("SELECT id, status FROM players WHERE code = ? AND status = 'running' LIMIT 1");
$stmt->bind_param("s", $player_code);
$stmt->execute();
$player = $stmt->get_result()->fetch_assoc();

if (!$player) {
    echo json_encode(["success" => false, "message" => "No running player"]);
    exit;
}
$player_id = (int)$player['id'];

/* 2) บันทึก log เป้า (บันทึกเฉพาะเป้าที่มี ID และไม่ใช่ Heartbeat) */
if ($target_id && $target_id !== "0") {
    $check = $conn->prepare("SELECT id FROM target_log WHERE player_id = ? AND target_id = ?");
    $check->bind_param("is", $player_id, $target_id);
    $check->execute();

    if ($check->get_result()->num_rows == 0) {
        $insert = $conn->prepare("INSERT INTO target_log (player_id, target_id, hit_time) VALUES (?, ?, NOW())");
        $insert->bind_param("is", $player_id, $target_id);
        $insert->execute();
    }
}

/* 3) นับจำนวนเป้าที่ล้มจริงจาก Database */
$resCount = $conn->query("SELECT COUNT(*) AS total FROM target_log WHERE player_id = $player_id");
$count = $resCount->fetch_assoc()['total'];

/* 4) อัปเดตเวลา (อัปเดตเฉพาะตอนสถานะยังเป็น running เท่านั้น) */
$update = $conn->prepare("UPDATE players SET time = ? WHERE id = ? AND status = 'running'");
$update->bind_param("di", $time, $player_id); // ใช้ "d" สำหรับ double/float
$update->execute();

/* 5) เช็คจำนวนเป้าจากตาราง event */
$event = $conn->query("SELECT target_count FROM event LIMIT 1")->fetch_assoc();
$target_required = (int)($event['target_count'] ?? 0);

$finished = false;
// ต้องยิงให้ "เท่ากับ" หรือ "มากกว่า" จำนวนที่ตั้งไว้ในหน้า Admin ถึงจะจบ
if ($count >= $target_required && $target_required > 0) {
    $conn->query("UPDATE players SET status = 'finished' WHERE id = $player_id");
    
    // ตั้งคนถัดไปเป็น ready
    $conn->query("UPDATE players SET status = 'ready' WHERE status = 'waiting' ORDER BY id ASC LIMIT 1");
    $finished = true;
}

echo json_encode([
    "success"  => true,
    "player"   => $player_code,
    "time"     => $time,
    "hit"      => $count,
    "target_required" => $target_required,
    "finished" => $finished
]);