<?php
/**
 * Migration: Remplacer les tarifs Eco/Premium/VIP par les tarifs par type de chambre
 * (Double, Triple, Quadruple, Quintuple)
 * 
 * Cette migration:
 * 1. Renomme les colonnes prix dans la table programmes
 * 2. Ajoute la colonne prix_quintuple
 * 3. Met à jour les valeurs de formule dans la table inscriptions
 */
require_once __DIR__ . '/config/app.php';

$db = getDB();

echo "<h2>Migration: Tarifs par type de chambre</h2>";

$db->beginTransaction();

try {
    // Vérifier si la migration a déjà été effectuée
    $columns = $db->query("PRAGMA table_info(programmes)")->fetchAll();
    $colNames = array_column($columns, 'name');
    
    if (in_array('prix_double', $colNames)) {
        echo "<p style='color:orange;'>⚠️ La migration a déjà été effectuée. Aucune action nécessaire.</p>";
        $db->rollBack();
        exit;
    }
    
    if (!in_array('prix_base', $colNames)) {
        echo "<p style='color:red;'>❌ Colonnes source introuvables. Structure de table inattendue.</p>";
        $db->rollBack();
        exit;
    }

    // SQLite ne supporte pas RENAME COLUMN avant la version 3.25.0
    // On utilise la méthode de recréation de table

    // === 1. Migration de la table programmes ===
    echo "<p>📦 Migration de la table programmes...</p>";
    
    // Créer la nouvelle table
    $db->exec("
        CREATE TABLE programmes_new (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            reference TEXT UNIQUE,
            nom TEXT NOT NULL,
            type TEXT NOT NULL,
            destination TEXT,
            date_depart TEXT,
            date_retour TEXT,
            duree INTEGER,
            prix_double REAL DEFAULT 0,
            prix_triple REAL DEFAULT 0,
            prix_quadruple REAL DEFAULT 0,
            prix_quintuple REAL DEFAULT 0,
            places_max INTEGER DEFAULT 0,
            places_reservees INTEGER DEFAULT 0,
            description TEXT,
            status TEXT DEFAULT 'en_cours',
            created_at TEXT DEFAULT (datetime('now')),
            updated_at TEXT DEFAULT (datetime('now'))
        )
    ");
    
    // Copier les données: prix_base->prix_quadruple, prix_premium->prix_double, prix_vip->prix_triple
    // Logique: Double (le plus cher) = ancien premium, Triple = ancien base, Quadruple = entre base et quintuple, Quintuple (le moins cher)
    $db->exec("
        INSERT INTO programmes_new (id, reference, nom, type, destination, date_depart, date_retour, duree, 
            prix_double, prix_triple, prix_quadruple, prix_quintuple,
            places_max, places_reservees, description, status, created_at, updated_at)
        SELECT id, reference, nom, type, destination, date_depart, date_retour, duree,
            prix_premium,
            prix_base,
            ROUND(prix_base * 0.85),
            ROUND(prix_base * 0.75),
            places_max, places_reservees, description, status, created_at, updated_at
        FROM programmes
    ");
    
    $db->exec("DROP TABLE programmes");
    $db->exec("ALTER TABLE programmes_new RENAME TO programmes");
    
    echo "<p>✅ Table programmes migrée avec succès.</p>";

    // === 2. Migration des valeurs de formule dans inscriptions ===
    echo "<p>📦 Migration des formules dans inscriptions...</p>";
    
    // Créer la nouvelle table inscriptions
    $db->exec("
        CREATE TABLE inscriptions_new (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            voyageur_id INTEGER NOT NULL,
            programme_id INTEGER NOT NULL,
            groupe_id INTEGER,
            formule TEXT DEFAULT 'double',
            num_dossier TEXT,
            statut_visa TEXT DEFAULT 'en_attente',
            vaccination TEXT DEFAULT 'non',
            hotel_id INTEGER,
            chambre_type TEXT,
            chambre_numero TEXT,
            vol_aller_id INTEGER,
            vol_retour_id INTEGER,
            prix_total REAL DEFAULT 0,
            montant_paye REAL DEFAULT 0,
            statut_paiement TEXT DEFAULT 'impaye',
            notes TEXT,
            status TEXT DEFAULT 'en_cours',
            created_at TEXT DEFAULT (datetime('now')),
            updated_at TEXT DEFAULT (datetime('now')),
            FOREIGN KEY (voyageur_id) REFERENCES voyageurs(id),
            FOREIGN KEY (programme_id) REFERENCES programmes(id),
            FOREIGN KEY (groupe_id) REFERENCES groupes(id),
            FOREIGN KEY (hotel_id) REFERENCES hotels(id)
        )
    ");
    
    // Copier les données avec conversion des formules
    $db->exec("
        INSERT INTO inscriptions_new 
        SELECT id, voyageur_id, programme_id, groupe_id,
            CASE formule
                WHEN 'economique' THEN 'quadruple'
                WHEN 'premium' THEN 'double'
                WHEN 'vip' THEN 'triple'
                ELSE formule
            END,
            num_dossier, statut_visa, vaccination, hotel_id, chambre_type, chambre_numero,
            vol_aller_id, vol_retour_id, prix_total, montant_paye, statut_paiement,
            notes, status, created_at, updated_at
        FROM inscriptions
    ");
    
    $db->exec("DROP TABLE inscriptions");
    $db->exec("ALTER TABLE inscriptions_new RENAME TO inscriptions");
    
    echo "<p>✅ Formules dans inscriptions migrées avec succès.</p>";

    $db->commit();
    
    // Afficher un résumé
    $progCount = $db->query("SELECT COUNT(*) FROM programmes")->fetchColumn();
    $insCount = $db->query("SELECT COUNT(*) FROM inscriptions")->fetchColumn();
    
    echo "<hr>";
    echo "<h3 style='color: green;'>✅ Migration terminée avec succès!</h3>";
    echo "<p><strong>Programmes migrés:</strong> $progCount</p>";
    echo "<p><strong>Inscriptions migrées:</strong> $insCount</p>";
    echo "<p><strong>Mapping des anciens tarifs:</strong></p>";
    echo "<ul>";
    echo "<li>Premium → Prix Double (chambre partagée à 2)</li>";
    echo "<li>Économique → Prix Quadruple (chambre partagée à 4)</li>";
    echo "<li>VIP → Prix Triple (chambre partagée à 3)</li>";
    echo "<li>Nouveau: Prix Quintuple (chambre partagée à 5) = 75% du prix économique</li>";
    echo "</ul>";
    echo "<p><a href='programmes.php'>Voir les programmes</a> | <a href='inscriptions.php'>Voir les inscriptions</a></p>";
    
} catch (Exception $e) {
    $db->rollBack();
    echo "<h3 style='color: red;'>❌ Erreur lors de la migration: " . $e->getMessage() . "</h3>";
}
