<?php
session_start();
require_once 'config.php';
require_once 'functions.php';
requireLogin();
$user = getConnectedUser($pdo);
requireAdmin($user);

header('Content-Type: application/json');

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo json_encode(['error' => 'Méthode non autorisée']); exit;
}

$adminEmail = 'brain@mail.com';

try {
    // --- Récupérer l'ID de l'admin à garder ---
    $adminStmt = $pdo->prepare("SELECT id FROM users WHERE email = ? LIMIT 1");
    $adminStmt->execute([$adminEmail]);
    $adminRow  = $adminStmt->fetch();
    $adminId   = $adminRow ? (int)$adminRow['id'] : null;

    if (!$adminId) {
        echo json_encode(['error' => "Admin introuvable avec l'email {$adminEmail}"]); exit;
    }

    $log = [];

    // --- Désactiver les clés étrangères ---
    try { $pdo->exec("SET FOREIGN_KEY_CHECKS=0"); } catch(Exception $e){}

    // ── TABLES À VIDER COMPLÈTEMENT ──────────────────────────────

    $tablesToClear = [
        // Gages et tout ce qui y est rattaché
        'bets',
        'bet_votes',
        'bet_proofs',
        'bet_media',
        'bet_arbitrages',
        'reports',
        // Chat et messages
        'messages',
        'private_messages',
        'chat_reports',
        // Social
        'friends',
        'user_ratings',
        'oracle_votes',
        'circle_join_requests',
        // Notifications et sécurité
        'notifications',
        'login_attempts',
        'password_resets',
        // Stats et trophées gagnés
        'user_stats',
        'user_trophies',
        // Wallet
        'wallet_transactions',
        // Boutique
        'store_sales',
        // Bugs
        'bug_reports',
    ];

    foreach ($tablesToClear as $table) {
        try {
            $count = (int)$pdo->query("SELECT COUNT(*) FROM {$table}")->fetchColumn();
            $pdo->exec("DELETE FROM {$table}");
            try { $pdo->exec("ALTER TABLE {$table} AUTO_INCREMENT = 1"); } catch(Exception $e){}
            $log[] = "✅ {$table} : {$count} ligne(s) supprimée(s)";
        } catch (Exception $e) {
            $log[] = "⚠️ {$table} : ignorée ({$e->getMessage()})";
        }
    }

    // ── USERS — garder seulement l'admin ─────────────────────────
    try {
        $countUsers = (int)$pdo->query("SELECT COUNT(*) FROM users WHERE id != {$adminId}")->fetchColumn();
        $pdo->prepare("DELETE FROM users WHERE id != ?")->execute([$adminId]);
        // Remettre le wallet et les points de l'admin à 0
        $pdo->prepare("UPDATE users SET wallet_points=0, points=0, interaction_points=0, last_daily_bonus=NULL WHERE id=?")
            ->execute([$adminId]);
        $log[] = "✅ users : {$countUsers} user(s) supprimé(s) — admin conservé (id:{$adminId})";
    } catch (Exception $e) {
        $log[] = "❌ users : ERREUR — " . $e->getMessage();
    }

    // ── CERCLES — tout vider ──────────────────────────────────────
    try {
        $countCircles = (int)$pdo->query("SELECT COUNT(*) FROM circles")->fetchColumn();
        $pdo->exec("DELETE FROM circles");
        $pdo->exec("DELETE FROM circle_members");
        try { $pdo->exec("ALTER TABLE circles AUTO_INCREMENT = 1"); } catch(Exception $e){}
        try { $pdo->exec("ALTER TABLE circle_members AUTO_INCREMENT = 1"); } catch(Exception $e){}
        $log[] = "✅ circles + circle_members : {$countCircles} cercle(s) supprimé(s)";
    } catch (Exception $e) {
        $log[] = "⚠️ circles : " . $e->getMessage();
    }

    // ── Réactiver les clés étrangères ────────────────────────────
    try { $pdo->exec("SET FOREIGN_KEY_CHECKS=1"); } catch(Exception $e){}

    // ── Recréer les stats vides pour l'admin ─────────────────────
    try {
        $pdo->prepare("INSERT IGNORE INTO user_stats (user_id) VALUES (?)")->execute([$adminId]);
        $log[] = "✅ user_stats : recréé pour l'admin";
    } catch (Exception $e) {}

    echo json_encode([
        'ok'    => true,
        'admin' => $adminId,
        'log'   => $log,
    ]);

} catch (Exception $e) {
    try { $pdo->exec("SET FOREIGN_KEY_CHECKS=1"); } catch(Exception $ex){}
    echo json_encode(['error' => $e->getMessage()]);
}
?>
