<?php
session_start();
require_once 'includes/config.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['id_yeu_cau'], $_POST['id_thanh_vien'], $_POST['so_sao'])) {
    
    // Ép kiểu dữ liệu để bảo mật
    $id_yeu_cau = (int)$_POST['id_yeu_cau'];
    $id_thanh_vien = (int)$_POST['id_thanh_vien'];
    $so_sao = (int)$_POST['so_sao'];
    // Lọc XSS cho bình luận
    $nhan_xet = htmlspecialchars(trim($_POST['nhan_xet'] ?? ''), ENT_QUOTES, 'UTF-8');

    // 1. Logic quy đổi điểm theo quy định
    $diem_cong = 0;
    if ($so_sao == 5) {
        $diem_cong = 10;
    } elseif ($so_sao == 4) {
        $diem_cong = 5;
    } elseif ($so_sao == 3) {
        $diem_cong = 0;
    } elseif ($so_sao <= 2) {
        $diem_cong = -10;
    }

    try {
        // Bắt đầu khóa Database để xử lý giao dịch an toàn
        $pdo->beginTransaction();

        // 2. Kiểm tra xem yêu cầu này đã được đánh giá chưa (Ngăn chặn Spam f5)
        $stmt_check = $pdo->prepare("SELECT id FROM danh_gia_dich_vu WHERE id_yeu_cau = ?");
        $stmt_check->execute([$id_yeu_cau]);
        if ($stmt_check->fetch()) {
            throw new Exception("Khách hàng đã gửi đánh giá cho dịch vụ này rồi.");
        }

        // 3. Insert dữ liệu vào bảng đánh giá
        $stmt_insert = $pdo->prepare("INSERT INTO danh_gia_dich_vu (id_yeu_cau, id_thanh_vien, so_sao, nhan_xet) VALUES (?, ?, ?, ?)");
        $stmt_insert->execute([$id_yeu_cau, $id_thanh_vien, $so_sao, $nhan_xet]);

        // 4. Truy vấn điểm hiện tại và KHÓA DÒNG (FOR UPDATE) để tránh đụng độ luồng xử lý
        $stmt_get = $pdo->prepare("SELECT diem_uy_tin FROM thanh_vien WHERE id = ? FOR UPDATE");
        $stmt_get->execute([$id_thanh_vien]);
        $thanh_vien = $stmt_get->fetch(PDO::FETCH_ASSOC);

        if ($thanh_vien) {
            $diem_hien_tai = (int)$thanh_vien['diem_uy_tin'];
            $diem_moi = $diem_hien_tai + $diem_cong;
            
            // Đảm bảo điểm không bị âm sâu (Giới hạn min = 0)
            if ($diem_moi < 0) {
                $diem_moi = 0;
            }

            // 5. Logic tự động xét duyệt cấp bậc
            $cap_bac_moi = 'tieu_chuan';
            if ($diem_moi >= 500) {
                $cap_bac_moi = 'tinh_hoa';
            } elseif ($diem_moi >= 100) {
                $cap_bac_moi = 'chuyen_nghiep';
            }

            // 6. Cập nhật lại điểm và cấp bậc mới cho Thành viên
            $stmt_update = $pdo->prepare("UPDATE thanh_vien SET diem_uy_tin = ?, cap_bac = ? WHERE id = ?");
            $stmt_update->execute([$diem_moi, $cap_bac_moi, $id_thanh_vien]);
        } else {
            throw new Exception("Lỗi hệ thống: Không xác định được hồ sơ đối tác.");
        }

        // Hoàn tất giao dịch (Commit)
        $pdo->commit();
        
        // Trả về JSON thành công (Sử dụng thông điệp thương hiệu)
        echo json_encode([
            "status" => "success", 
            "message" => "Cảm ơn bạn! Đánh giá đã được ghi nhận nhằm duy trì sứ mệnh Bảo vệ cuộc sống và nâng cao uy tín hệ thống."
        ]);

    } catch (Exception $e) {
        // Nếu có bất kỳ lỗi nào, hoàn tác lại toàn bộ (Rollback)
        $pdo->rollBack();
        echo json_encode(["status" => "error", "message" => $e->getMessage()]);
    }
} else {
    echo json_encode(["status" => "error", "message" => "Dữ liệu đầu vào không hợp lệ."]);
}
?>