<?php
require_once __DIR__ . '/config/app.php';

$db = getDB();

// Noms et prénoms marocains typiques
$noms = ['AMRANI', 'BENALI', 'CHAKIR', 'DAOUDI', 'ELHAJJI', 'FILALI', 'GHAZI', 'HAMMOUDI', 'IDRISSI', 'JEBLI', 
         'KADIRI', 'LAMRANI', 'MANSOURI', 'NACIRI', 'OUAZZANI', 'QADIRI', 'RAMI', 'SABRI', 'TAHIRI', 'ZIANI'];

$prenoms_m = ['Hassan', 'Karim', 'Rachid', 'Samir', 'Tarik', 'Walid', 'Yassine', 'Zakaria', 'Amine', 'Bilal'];
$prenoms_f = ['Aicha', 'Btissam', 'Chaimae', 'Dounia', 'Fadwa', 'Ghita', 'Hanane', 'Imane', 'Jamila', 'Karima'];

$villes = ['Casablanca', 'Rabat', 'Fès', 'Marrakech', 'Tanger', 'Agadir', 'Meknès', 'Oujda', 'Kenitra', 'Tétouan'];

// Récupérer les programmes existants
$programmes = $db->query("SELECT id, reference, prix_double, prix_triple, prix_quadruple, prix_quintuple FROM programmes WHERE status = 'en_cours' ORDER BY id LIMIT 5")->fetchAll();

if (empty($programmes)) {
    die("Aucun programme disponible. Veuillez d'abord exécuter install.php");
}

// Récupérer le dernier numéro de référence voyageur
$lastRef = $db->query("SELECT reference FROM voyageurs ORDER BY id DESC LIMIT 1")->fetchColumn();
$refNum = $lastRef ? intval(substr($lastRef, 4)) : 8;

echo "<h2>Ajout de 20 voyageurs avec inscriptions et paiements...</h2>";

$db->beginTransaction();

try {
    for ($i = 1; $i <= 20; $i++) {
        $refNum++;
        $reference = 'VYG-' . str_pad($refNum, 3, '0', STR_PAD_LEFT);
        
        // Alterner entre hommes et femmes
        $sexe = ($i % 2 == 0) ? 'F' : 'M';
        $prenom = $sexe == 'M' ? $prenoms_m[array_rand($prenoms_m)] : $prenoms_f[array_rand($prenoms_f)];
        $nom = $noms[array_rand($noms)];
        
        // Générer des données aléatoires
        $annee = rand(1950, 1995);
        $mois = str_pad(rand(1, 12), 2, '0', STR_PAD_LEFT);
        $jour = str_pad(rand(1, 28), 2, '0', STR_PAD_LEFT);
        $date_naissance = "$annee-$mois-$jour";
        
        $cin = chr(rand(65, 90)) . chr(rand(65, 90)) . rand(100000, 999999);
        $passeport = 'MA' . rand(1000000, 9999999);
        $tel = '066' . rand(1000000, 9999999);
        $ville = $villes[array_rand($villes)];
        
        $annee_exp = rand(2026, 2030);
        $date_exp_passeport = "$annee_exp-$mois-$jour";
        
        // Insérer le voyageur
        $stmt = $db->prepare("
            INSERT INTO voyageurs (reference, nom, prenom, date_naissance, sexe, nationalite, cin, num_passeport, 
                                   date_expiration_passeport, telephone, email, ville, status)
            VALUES (?, ?, ?, ?, ?, 'Marocaine', ?, ?, ?, ?, ?, ?, 'actif')
        ");
        
        $email = strtolower($prenom . '.' . $nom . '@email.com');
        
        $stmt->execute([
            $reference, $nom, $prenom, $date_naissance, $sexe, $cin, $passeport,
            $date_exp_passeport, $tel, $email, $ville
        ]);
        
        $voyageur_id = $db->lastInsertId();
        
        // Choisir un programme aléatoire
        $programme = $programmes[array_rand($programmes)];
        
        // Choisir un type de chambre aléatoire
        $formules = [
            ['formule' => 'double', 'prix' => $programme['prix_double']],
            ['formule' => 'triple', 'prix' => $programme['prix_triple']],
            ['formule' => 'quadruple', 'prix' => $programme['prix_quadruple']],
            ['formule' => 'quintuple', 'prix' => $programme['prix_quintuple']]
        ];
        $formule_data = $formules[array_rand($formules)];
        
        // Générer un numéro de dossier
        $prog_prefix = substr($programme['reference'], 0, 3);
        $num_dossier = $prog_prefix . '-D' . str_pad(rand(100, 999), 3, '0', STR_PAD_LEFT);
        
        // Statut de paiement aléatoire
        $statuts_paiement = [
            ['statut' => 'paye', 'pourcentage' => 100],
            ['statut' => 'partiel', 'pourcentage' => rand(30, 80)],
            ['statut' => 'impaye', 'pourcentage' => 0]
        ];
        $statut_data = $statuts_paiement[array_rand($statuts_paiement)];
        
        $prix_total = $formule_data['prix'];
        $montant_paye = ($prix_total * $statut_data['pourcentage']) / 100;
        
        // Insérer l'inscription
        $stmt = $db->prepare("
            INSERT INTO inscriptions (voyageur_id, programme_id, formule, num_dossier, statut_visa, vaccination,
                                      prix_total, montant_paye, statut_paiement, status)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'en_cours')
        ");
        
        $statut_visa = $statut_data['statut'] == 'paye' ? 'confirme' : 'en_attente';
        $vaccination = rand(0, 1) ? 'oui' : 'non';
        
        $stmt->execute([
            $voyageur_id, $programme['id'], $formule_data['formule'], $num_dossier,
            $statut_visa, $vaccination, $prix_total, $montant_paye, $statut_data['statut']
        ]);
        
        $inscription_id = $db->lastInsertId();
        
        // Créer les paiements si montant payé > 0
        if ($montant_paye > 0) {
            $modes_paiement = ['especes', 'virement', 'cheque', 'carte'];
            
            if ($statut_data['statut'] == 'paye') {
                // Paiement complet - peut être en 1 ou 2 versements
                $nb_versements = rand(1, 2);
                
                if ($nb_versements == 1) {
                    // Un seul paiement
                    $stmt = $db->prepare("
                        INSERT INTO paiements (inscription_id, voyageur_id, montant, mode_paiement, 
                                               reference_paiement, date_paiement, created_by)
                        VALUES (?, ?, ?, ?, ?, ?, 1)
                    ");
                    
                    $mode = $modes_paiement[array_rand($modes_paiement)];
                    $ref_paiement = strtoupper(substr($mode, 0, 3)) . '-' . date('Ymd') . rand(100, 999);
                    $date_paiement = '2026-' . str_pad(rand(1, 2), 2, '0', STR_PAD_LEFT) . '-' . str_pad(rand(1, 28), 2, '0', STR_PAD_LEFT);
                    
                    $stmt->execute([
                        $inscription_id, $voyageur_id, $montant_paye, $mode, $ref_paiement, $date_paiement
                    ]);
                } else {
                    // Deux versements
                    $montant1 = round($montant_paye * 0.6);
                    $montant2 = $montant_paye - $montant1;
                    
                    $stmt = $db->prepare("
                        INSERT INTO paiements (inscription_id, voyageur_id, montant, mode_paiement, 
                                               reference_paiement, date_paiement, created_by)
                        VALUES (?, ?, ?, ?, ?, ?, 1)
                    ");
                    
                    // Premier versement
                    $mode1 = $modes_paiement[array_rand($modes_paiement)];
                    $ref1 = strtoupper(substr($mode1, 0, 3)) . '-' . date('Ymd') . rand(100, 999);
                    $date1 = '2026-01-' . str_pad(rand(1, 28), 2, '0', STR_PAD_LEFT);
                    $stmt->execute([$inscription_id, $voyageur_id, $montant1, $mode1, $ref1, $date1]);
                    
                    // Deuxième versement
                    $mode2 = $modes_paiement[array_rand($modes_paiement)];
                    $ref2 = strtoupper(substr($mode2, 0, 3)) . '-' . date('Ymd') . rand(100, 999);
                    $date2 = '2026-02-' . str_pad(rand(1, 26), 2, '0', STR_PAD_LEFT);
                    $stmt->execute([$inscription_id, $voyageur_id, $montant2, $mode2, $ref2, $date2]);
                }
            } else {
                // Paiement partiel - un seul versement
                $stmt = $db->prepare("
                    INSERT INTO paiements (inscription_id, voyageur_id, montant, mode_paiement, 
                                           reference_paiement, date_paiement, created_by)
                    VALUES (?, ?, ?, ?, ?, ?, 1)
                ");
                
                $mode = $modes_paiement[array_rand($modes_paiement)];
                $ref_paiement = strtoupper(substr($mode, 0, 3)) . '-' . date('Ymd') . rand(100, 999);
                $date_paiement = '2026-' . str_pad(rand(1, 2), 2, '0', STR_PAD_LEFT) . '-' . str_pad(rand(1, 28), 2, '0', STR_PAD_LEFT);
                
                $stmt->execute([
                    $inscription_id, $voyageur_id, $montant_paye, $mode, $ref_paiement, $date_paiement
                ]);
            }
        }
        
        echo "<p>✅ Voyageur $i/$refNum: <strong>$prenom $nom</strong> ($reference) - Programme: {$programme['reference']} - Formule: {$formule_data['formule']} - Prix: " . number_format($prix_total, 0, ',', ' ') . " DH - Payé: " . number_format($montant_paye, 0, ',', ' ') . " DH ({$statut_data['statut']})</p>";
    }
    
    $db->commit();
    
    echo "<hr>";
    echo "<h3 style='color: green;'>✅ Succès! 20 voyageurs ont été ajoutés avec leurs inscriptions et paiements.</h3>";
    echo "<p><a href='voyageurs.php'>Voir les voyageurs</a> | <a href='inscriptions.php'>Voir les inscriptions</a> | <a href='paiements.php'>Voir les paiements</a></p>";
    
} catch (Exception $e) {
    $db->rollBack();
    echo "<h3 style='color: red;'>❌ Erreur: " . $e->getMessage() . "</h3>";
}
