<?php
/**
 * cron_cancel_bets.php
 * 
 * À exécuter quotidiennement via cron:
 *   0 2 * * * php /path/to/public_html/jetegageque/cron_cancel_bets.php
 *
 * Annule automatiquement les gages dont la date d'échéance est dépassée de 1 jour
 * et qui n'ont pas encore été acceptés par le Gageur 2.
 */

require_once __DIR__ . '/config.php';
require_once __DIR__ . '/functions.php';

$cancelled = 0;
$errors    = 0;
$log       = [];

try {
    // Trouver les gages en attente d'acceptation dont l'échéance - 1 jour est dépassée
    $stmt = $pdo->query("
        SELECT b.id, b.user_id, b.parieur2_id, b.description, b.echeance, b.amount
        FROM bets b
        WHERE b.status = 'pending'
          AND (b.acceptance_status = 'pending_p2' OR (b.parieur2_id IS NOT NULL AND b.acceptance_status IS NULL))
          AND b.echeance IS NOT NULL
          AND b.echeance != '0000-00-00 00:00:00'
          AND DATE_SUB(b.echeance, INTERVAL 1 DAY) <= NOW()
          AND b.is_global = 0
    ");
    $bets = $stmt->fetchAll();

    foreach ($bets as $bet) {
        try {
            // Annuler le gage
            $pdo->prepare("
                UPDATE bets SET status='cancelled', acceptance_status='cancelled'
                WHERE id=?
            ")->execute([$bet['id']]);

            // Notifier le lanceur
            addNotification($pdo, $bet['user_id'],
                "Gage #" . $bet['id'] . " annulé automatiquement : non accepté avant la date limite.",
                "index.php"
            );

            // Notifier le gageur2 si défini
            if ($bet['parieur2_id']) {
                addNotification($pdo, $bet['parieur2_id'],
                    "Le gage #" . $bet['id'] . " qui vous était proposé a été annulé (délai d'acceptation expiré).",
                    "index.php"
                );
            }

            // Rembourser les jetons misés si applicable
            try {
                $stake = (int)$pdo->query("SELECT wallet_stake FROM bets WHERE id=" . (int)$bet['id'])->fetchColumn();
                if ($stake > 0) {
                    $pdo->prepare("UPDATE users SET wallet_points=wallet_points+? WHERE id=?")
                        ->execute([$stake, $bet['user_id']]);
                    $pdo->prepare("INSERT INTO wallet_transactions (user_id,amount,type,description,ref_id) VALUES (?,?,?,?,?)")
                        ->execute([$bet['user_id'], $stake, 'admin_grant', "Remboursement mise gage #{$bet['id']} annulé", $bet['id']]);
                }
            } catch (Exception $e) {}

            $cancelled++;
            $log[] = "Gage #{$bet['id']} annulé (échéance: {$bet['echeance']})";

        } catch (Exception $e) {
            $errors++;
            $log[] = "ERREUR gage #{$bet['id']}: " . $e->getMessage();
        }
    }

    echo date('Y-m-d H:i:s') . " — {$cancelled} gage(s) annulé(s), {$errors} erreur(s).\n";
    foreach ($log as $line) echo "  → {$line}\n";

} catch (Exception $e) {
    echo "ERREUR CRITIQUE: " . $e->getMessage() . "\n";
}
?>
