<?php
/**
 * Script de test pour l'initialisation des contours départementaux
 */

require_once __DIR__ . '/src/Config/AppConfig.php';
require_once __DIR__ . '/src/Core/Database.php';
require_once __DIR__ . '/scripts/init_departements_contours.php';

echo "Test du système d'initialisation des contours départementaux\n";
echo "===========================================================\n\n";

try {
    // Initialiser la base de données
    $appConfig = AppConfig::getInstance();
    Database::init($appConfig->getDatabaseConfig());
    $db = Database::getInstance();
    
    // 1. Vérifier si la table existe
    $initializer = new DepartementContoursInitializer($db);
    $tableExists = $initializer->tableExists();
    
    echo "1. État actuel:\n";
    echo "   - Table x_departements_contours existe : " . ($tableExists ? "OUI" : "NON") . "\n\n";
    
    if ($tableExists) {
        // Compter les enregistrements
        $stmt = $db->query("SELECT COUNT(*) as count FROM x_departements_contours");
        $count = $stmt->fetch()['count'];
        echo "   - Nombre de départements : $count\n";
        
        // Lister quelques départements
        $stmt = $db->query("SELECT code_dept, nom_dept FROM x_departements_contours ORDER BY code_dept LIMIT 10");
        $depts = $stmt->fetchAll();
        
        echo "   - Premiers départements :\n";
        foreach ($depts as $dept) {
            echo "     * {$dept['code_dept']} - {$dept['nom_dept']}\n";
        }
        echo "\n";
    }
    
    // 2. Tester la méthode runIfNeeded
    echo "2. Test de runIfNeeded():\n";
    
    // Test avec un utilisateur non-admin
    echo "   - Test avec utilisateur 'test' : ";
    $result = DepartementContoursInitializer::runIfNeeded($db, 'test');
    echo ($result === null ? "Ignoré (OK)" : "Exécuté (ERREUR)") . "\n";
    
    // Test avec d6soft mais table existante
    if ($tableExists) {
        echo "   - Test avec 'd6soft' et table existante : ";
        $result = DepartementContoursInitializer::runIfNeeded($db, 'd6soft');
        echo ($result === null ? "Ignoré (OK)" : "Exécuté (ERREUR)") . "\n";
    }
    
    // 3. Test de récupération d'un département spécifique
    echo "\n3. Test de l'API geo.api.gouv.fr:\n";
    echo "   - Récupération du département 22 (Côtes-d'Armor)...\n";
    
    $url = "https://geo.api.gouv.fr/departements/22?fields=nom,contour";
    $context = stream_context_create([
        'http' => [
            'timeout' => 10,
            'header' => "User-Agent: Geosector/1.0\r\n"
        ]
    ]);
    
    $response = @file_get_contents($url, false, $context);
    
    if ($response !== false) {
        $data = json_decode($response, true);
        echo "   ✓ Réponse reçue\n";
        echo "   - Nom : " . ($data['nom'] ?? 'Non disponible') . "\n";
        echo "   - Contour : " . (isset($data['contour']) ? "Disponible" : "Non disponible") . "\n";
        
        if (isset($data['contour']['coordinates'])) {
            $coords = $data['contour']['coordinates'];
            $pointCount = 0;
            
            // Compter les points selon la structure
            if (isset($coords[0][0]) && is_numeric($coords[0][0])) {
                $pointCount = count($coords);
            } elseif (isset($coords[0]) && is_array($coords[0])) {
                $pointCount = count($coords[0]);
            }
            
            echo "   - Nombre de points : $pointCount\n";
        }
    } else {
        echo "   ✗ Erreur lors de la récupération\n";
    }
    
    // 4. Si la table n'existe pas, proposer de l'initialiser
    if (!$tableExists) {
        echo "\n4. La table n'existe pas.\n";
        echo "   Pour l'initialiser :\n";
        echo "   - Connectez-vous avec l'utilisateur 'd6soft'\n";
        echo "   - OU exécutez : php scripts/init_departements_contours.php\n";
    }
    
} catch (Exception $e) {
    echo "✗ Erreur : " . $e->getMessage() . "\n";
    echo "Trace:\n" . $e->getTraceAsString() . "\n";
}

echo "\n";