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

if (!isset($_SESSION['nguoi_dung_id']) || $_SESSION['vai_tro'] !== 'admin') {
    http_response_code(403);
    echo json_encode(['ok' => false, 'msg' => 'Truy cập bị từ chối']);
    exit;
}

header('Content-Type: application/json; charset=utf-8');

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo json_encode(['ok' => false, 'msg' => 'Phải gửi POST']);
    exit;
}

$ids = $_POST['ids'] ?? [];
if (!is_array($ids) || count($ids) === 0) {
    echo json_encode(['ok' => false, 'msg' => 'Không có giao dịch để xử lý']);
    exit;
}

$processed = 0;
$errors = [];
try {
    $pdo->beginTransaction();

    $stmt_select = $pdo->prepare("SELECT * FROM lich_su_affiliate WHERE id = ? FOR UPDATE");
    $stmt_update = $pdo->prepare("UPDATE lich_su_affiliate SET trang_thai = 'da_thanh_toan' WHERE id = ?");
    $stmt_insert_gd = $pdo->prepare("INSERT INTO giao_dich_tai_chinh (id_nguoi_nhan, so_tien, loai_giao_dich, trang_thai, ghi_chu) VALUES (?, ?, 'hoa_hong', 'da_chuyen', ?)");
    $stmt_upsert_wallet = $pdo->prepare("INSERT INTO vi_thanh_vien (thanh_vien_id, so_du) VALUES (?, ?) ON DUPLICATE KEY UPDATE so_du = so_du + VALUES(so_du)");

    foreach ($ids as $rawId) {
        $id = (int)$rawId;
        if ($id <= 0) continue;

        $stmt_select->execute([$id]);
        $row = $stmt_select->fetch(PDO::FETCH_ASSOC);
        if (!$row) {
            $errors[] = "ID $id không tồn tại";
            continue;
        }
        if (($row['trang_thai'] ?? '') !== 'cho_duyet') {
            $errors[] = "ID $id trạng thái không hợp lệ ({$row['trang_thai']})";
            continue;
        }
        $nguoi = (int)($row['nguoi_gioi_thieu_id'] ?? 0);
        $so_tien = (float)($row['so_tien_hoa_hong'] ?? 0);
        if ($nguoi <= 0 || $so_tien <= 0) {
            $errors[] = "ID $id thiếu người nhận hoặc số tiền";
            continue;
        }

        // Cập nhật trạng thái lịch sử affiliate
        $stmt_update->execute([$id]);

        // Ghi giao dịch tài chính vào lịch sử
        $ghi_chu = 'Thanh toán hoa hồng từ lich_su_affiliate id=' . $id;
        $stmt_insert_gd->execute([$nguoi, $so_tien, $ghi_chu]);

        // Cập nhật ví thành viên
        $stmt_upsert_wallet->execute([$nguoi, $so_tien]);

        $processed++;
    }

    $pdo->commit();
    echo json_encode(['ok' => true, 'processed' => $processed, 'errors' => $errors]);
    exit;

} catch (Exception $e) {
    try { $pdo->rollBack(); } catch(Exception $_) {}
    echo json_encode(['ok' => false, 'msg' => $e->getMessage(), 'errors' => $errors]);
    exit;
}
