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

$db = getDB();

// Create all tables
$db->exec("
    -- Users table
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username TEXT UNIQUE NOT NULL,
        password TEXT NOT NULL,
        full_name TEXT NOT NULL,
        email TEXT,
        phone TEXT,
        role TEXT NOT NULL DEFAULT 'agent',
        status TEXT NOT NULL DEFAULT 'actif',
        last_login TEXT,
        created_at TEXT DEFAULT (datetime('now')),
        updated_at TEXT DEFAULT (datetime('now'))
    );

    -- Voyageurs / Pèlerins
    CREATE TABLE IF NOT EXISTS voyageurs (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        reference TEXT UNIQUE,
        nom TEXT NOT NULL,
        prenom TEXT NOT NULL,
        date_naissance TEXT,
        lieu_naissance TEXT,
        sexe TEXT,
        nationalite TEXT DEFAULT 'Marocaine',
        cin TEXT,
        num_passeport TEXT,
        date_expiration_passeport TEXT,
        telephone TEXT,
        telephone2 TEXT,
        email TEXT,
        adresse TEXT,
        ville TEXT,
        contact_urgence_nom TEXT,
        contact_urgence_tel TEXT,
        contact_urgence_lien TEXT,
        photo TEXT,
        notes TEXT,
        status TEXT DEFAULT 'actif',
        created_at TEXT DEFAULT (datetime('now')),
        updated_at TEXT DEFAULT (datetime('now'))
    );

    -- Programmes / Voyages
    CREATE TABLE IF NOT EXISTS programmes (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        reference TEXT UNIQUE,
        nom TEXT NOT NULL,
        type TEXT NOT NULL, -- hajj, omra, voyage
        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'))
    );

    -- Inscriptions (link voyageurs to programmes)
    CREATE TABLE IF NOT EXISTS inscriptions (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        voyageur_id INTEGER NOT NULL,
        programme_id INTEGER NOT NULL,
        groupe_id INTEGER,
        formule TEXT DEFAULT 'double', -- double, triple, quadruple, quintuple
        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)
    );

    -- Hotels
    CREATE TABLE IF NOT EXISTS hotels (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nom TEXT NOT NULL,
        ville TEXT,
        pays TEXT,
        adresse TEXT,
        etoiles INTEGER DEFAULT 3,
        telephone TEXT,
        email TEXT,
        contact_nom TEXT,
        chambres_total INTEGER DEFAULT 0,
        tarif_double REAL DEFAULT 0,
        tarif_triple REAL DEFAULT 0,
        tarif_quadruple REAL DEFAULT 0,
        tarif_quintuple REAL DEFAULT 0,
        notes TEXT,
        status TEXT DEFAULT 'actif',
        created_at TEXT DEFAULT (datetime('now')),
        updated_at TEXT DEFAULT (datetime('now'))
    );

    -- Vols
    CREATE TABLE IF NOT EXISTS vols (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        compagnie TEXT NOT NULL,
        numero_vol TEXT,
        aeroport_depart TEXT,
        aeroport_arrivee TEXT,
        date_depart TEXT,
        heure_depart TEXT,
        date_arrivee TEXT,
        heure_arrivee TEXT,
        places_total INTEGER DEFAULT 0,
        places_reservees INTEGER DEFAULT 0,
        prix REAL DEFAULT 0,
        programme_id INTEGER,
        notes TEXT,
        status TEXT DEFAULT 'actif',
        created_at TEXT DEFAULT (datetime('now')),
        updated_at TEXT DEFAULT (datetime('now')),
        FOREIGN KEY (programme_id) REFERENCES programmes(id)
    );

    -- Groupes
    CREATE TABLE IF NOT EXISTS groupes (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nom TEXT NOT NULL,
        type TEXT DEFAULT 'hajj', -- hajj, omra, tourisme
        programme_id INTEGER,
        chef_groupe TEXT,
        chef_groupe_tel TEXT,
        capacite INTEGER DEFAULT 40,
        notes TEXT,
        status TEXT DEFAULT 'actif',
        created_at TEXT DEFAULT (datetime('now')),
        updated_at TEXT DEFAULT (datetime('now')),
        FOREIGN KEY (programme_id) REFERENCES programmes(id)
    );

    -- Paiements
    CREATE TABLE IF NOT EXISTS paiements (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        inscription_id INTEGER NOT NULL,
        voyageur_id INTEGER NOT NULL,
        montant REAL NOT NULL,
        mode_paiement TEXT DEFAULT 'especes', -- especes, virement, cheque, carte
        reference_paiement TEXT,
        date_paiement TEXT DEFAULT (date('now')),
        notes TEXT,
        recu_genere INTEGER DEFAULT 0,
        created_by INTEGER,
        created_at TEXT DEFAULT (datetime('now')),
        FOREIGN KEY (inscription_id) REFERENCES inscriptions(id),
        FOREIGN KEY (voyageur_id) REFERENCES voyageurs(id),
        FOREIGN KEY (created_by) REFERENCES users(id)
    );

    -- Depenses
    CREATE TABLE IF NOT EXISTS depenses (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        programme_id INTEGER,
        categorie TEXT NOT NULL,
        description TEXT,
        montant REAL NOT NULL,
        date_depense TEXT DEFAULT (date('now')),
        fournisseur TEXT,
        reference TEXT,
        notes TEXT,
        created_by INTEGER,
        created_at TEXT DEFAULT (datetime('now')),
        FOREIGN KEY (programme_id) REFERENCES programmes(id),
        FOREIGN KEY (created_by) REFERENCES users(id)
    );

    -- Documents
    CREATE TABLE IF NOT EXISTS documents (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        voyageur_id INTEGER,
        programme_id INTEGER,
        type TEXT NOT NULL,
        nom TEXT NOT NULL,
        fichier TEXT NOT NULL,
        notes TEXT,
        created_at TEXT DEFAULT (datetime('now')),
        FOREIGN KEY (voyageur_id) REFERENCES voyageurs(id),
        FOREIGN KEY (programme_id) REFERENCES programmes(id)
    );

    -- Settings (key-value store for agency info)
    CREATE TABLE IF NOT EXISTS settings (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        setting_key TEXT UNIQUE NOT NULL,
        setting_value TEXT DEFAULT '',
        updated_at TEXT DEFAULT (datetime('now'))
    );

    -- Logs
    CREATE TABLE IF NOT EXISTS logs (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_id INTEGER,
        action TEXT NOT NULL,
        details TEXT,
        ip_address TEXT,
        created_at TEXT DEFAULT (datetime('now')),
        FOREIGN KEY (user_id) REFERENCES users(id)
    );
");

// Create default admin user
$adminExists = $db->query("SELECT COUNT(*) FROM users WHERE username = 'admin'")->fetchColumn();
if (!$adminExists) {
    $stmt = $db->prepare("INSERT INTO users (username, password, full_name, email, role) VALUES (?, ?, ?, ?, ?)");
    $stmt->execute([
        'admin',
        password_hash('admin123', PASSWORD_DEFAULT),
        'Administrateur',
        'admin@uptours.ma',
        'admin'
    ]);
}

// Insert default settings
$settingsExist = $db->query("SELECT COUNT(*) FROM settings")->fetchColumn();
if (!$settingsExist) {
    $defaults = [
        'agence_nom' => 'UpTours',
        'agence_slogan' => 'Agence de Voyages, Hajj & Omra',
        'agence_adresse' => '123, Boulevard Mohammed V',
        'agence_ville' => 'Casablanca',
        'agence_telephone' => '0522-123456',
        'agence_telephone2' => '0661-234567',
        'agence_fax' => '0522-654321',
        'agence_email' => 'contact@uptours.ma',
        'agence_site_web' => 'www.uptours.ma',
        'agence_ice' => '001234567000012',
        'agence_if' => '12345678',
        'agence_rc' => '123456',
        'agence_cnss' => '1234567',
        'agence_patente' => '12345678',
        'agence_licence' => 'LIC-2024-001',
        'agence_banque_nom' => 'Banque Populaire',
        'agence_banque_agence' => 'Agence Casa Centre',
        'agence_banque_rib' => '101 810 0001234567890 12',
        'agence_banque_iban' => 'MA64 1018 1000 0123 4567 8901 2',
        'agence_banque_swift' => 'BCPOMAMC',
        'agence_logo' => '',
    ];
    $stmt = $db->prepare("INSERT INTO settings (setting_key, setting_value) VALUES (?, ?)");
    foreach ($defaults as $k => $v) {
        $stmt->execute([$k, $v]);
    }
}

// Insert demo data
$progCount = $db->query("SELECT COUNT(*) FROM programmes")->fetchColumn();
if ($progCount == 0) {
    // Demo programmes
    $db->exec("
        INSERT INTO programmes (reference, nom, type, destination, date_depart, date_retour, duree, prix_double, prix_triple, prix_quadruple, prix_quintuple, places_max, places_reservees, description, status)
        VALUES
        ('HAJ-2026-001', 'Hajj 2026 - Programme Classique', 'hajj', 'Makkah / Madinah', '2026-06-01', '2026-07-01', 30, 85000, 75000, 65000, 55000, 150, 47, 'Programme Hajj complet incluant vol, hébergement et transport', 'en_cours'),
        ('OMR-2026-001', 'Omra Ramadan 2026', 'omra', 'Makkah / Madinah', '2026-03-01', '2026-03-15', 15, 35000, 30000, 25000, 22000, 80, 32, 'Omra spéciale Ramadan avec hébergement premium', 'en_cours'),
        ('OMR-2026-002', 'Omra Printemps 2026', 'omra', 'Makkah / Madinah', '2026-04-10', '2026-04-20', 10, 28000, 24000, 20000, 18000, 60, 15, 'Omra de printemps - tarif promotionnel', 'en_cours'),
        ('VOY-2026-001', 'Istanbul & Cappadoce', 'voyage', 'Turquie', '2026-05-15', '2026-05-23', 8, 18000, 15000, 13000, 12000, 40, 22, 'Circuit découverte Turquie', 'en_cours'),
        ('VOY-2026-002', 'Andalousie Historique', 'voyage', 'Espagne', '2026-06-10', '2026-06-17', 7, 22000, 19000, 16000, 15000, 35, 8, 'Circuit historique Andalousie', 'en_cours');
    ");

    // Demo hotels
    $db->exec("
        INSERT INTO hotels (nom, ville, pays, adresse, etoiles, telephone, chambres_total, tarif_double, tarif_triple, tarif_quadruple, tarif_quintuple)
        VALUES
        ('Hilton Suites Makkah', 'Makkah', 'Arabie Saoudite', 'Ibrahim Al Khalil Road', 5, '+966-12-531-6000', 200, 800, 650, 550, 450),
        ('Dar Al Tawhid Intercontinental', 'Makkah', 'Arabie Saoudite', 'Ajyad Street', 5, '+966-12-574-6666', 150, 1200, 950, 800, 700),
        ('Al Haram Hotel', 'Madinah', 'Arabie Saoudite', 'Central Area', 4, '+966-14-826-0000', 180, 600, 480, 400, 350),
        ('Pullman Zamzam Makkah', 'Makkah', 'Arabie Saoudite', 'Abraj Al Bait', 5, '+966-12-571-8888', 120, 1000, 800, 680, 580),
        ('Crowne Plaza Madinah', 'Madinah', 'Arabie Saoudite', 'King Faisal Road', 5, '+966-14-811-2222', 160, 700, 560, 470, 400);
    ");

    // Demo vols
    $db->exec("
        INSERT INTO vols (compagnie, numero_vol, aeroport_depart, aeroport_arrivee, date_depart, heure_depart, date_arrivee, heure_arrivee, places_total, places_reservees, prix, programme_id)
        VALUES
        ('Royal Air Maroc', 'AT 800', 'Casablanca CMN', 'Jeddah JED', '2026-06-01', '08:00', '2026-06-01', '16:00', 180, 47, 8500, 1),
        ('Royal Air Maroc', 'AT 801', 'Jeddah JED', 'Casablanca CMN', '2026-07-01', '18:00', '2026-07-01', '23:00', 180, 47, 8500, 1),
        ('Saudia', 'SV 261', 'Casablanca CMN', 'Madinah MED', '2026-03-01', '10:00', '2026-03-01', '18:30', 200, 32, 6000, 2),
        ('Saudia', 'SV 262', 'Jeddah JED', 'Casablanca CMN', '2026-03-15', '20:00', '2026-03-16', '01:00', 200, 32, 6000, 2),
        ('Turkish Airlines', 'TK 620', 'Casablanca CMN', 'Istanbul IST', '2026-05-15', '07:30', '2026-05-15', '14:30', 220, 22, 4500, 4);
    ");

    // Demo voyageurs
    $db->exec("
        INSERT INTO voyageurs (reference, nom, prenom, date_naissance, sexe, nationalite, cin, num_passeport, date_expiration_passeport, telephone, email, ville, status)
        VALUES
        ('VYG-001', 'BENNANI', 'Ahmed', '1975-03-15', 'M', 'Marocaine', 'AB123456', 'MA1234567', '2028-06-15', '0661234567', 'ahmed.bennani@email.com', 'Casablanca', 'actif'),
        ('VYG-002', 'EL FASSI', 'Fatima', '1980-07-22', 'F', 'Marocaine', 'CD789012', 'MA2345678', '2027-11-20', '0662345678', 'fatima.elfassi@email.com', 'Rabat', 'actif'),
        ('VYG-003', 'ALAOUI', 'Mohammed', '1968-01-10', 'M', 'Marocaine', 'EF345678', 'MA3456789', '2026-04-01', '0663456789', 'mohammed.alaoui@email.com', 'Fès', 'actif'),
        ('VYG-004', 'TAZI', 'Khadija', '1985-09-05', 'F', 'Marocaine', 'GH901234', 'MA4567890', '2029-02-28', '0664567890', 'khadija.tazi@email.com', 'Marrakech', 'actif'),
        ('VYG-005', 'BERRADA', 'Youssef', '1972-12-18', 'M', 'Marocaine', 'IJ567890', 'MA5678901', '2027-08-10', '0665678901', 'youssef.berrada@email.com', 'Tanger', 'actif'),
        ('VYG-006', 'CHRAIBI', 'Amina', '1990-04-25', 'F', 'Marocaine', 'KL123789', 'MA6789012', '2028-12-05', '0666789012', 'amina.chraibi@email.com', 'Agadir', 'actif'),
        ('VYG-007', 'IDRISSI', 'Omar', '1965-06-30', 'M', 'Marocaine', 'MN456123', 'MA7890123', '2026-03-15', '0667890123', 'omar.idrissi@email.com', 'Oujda', 'actif'),
        ('VYG-008', 'SQALLI', 'Zineb', '1988-11-14', 'F', 'Marocaine', 'OP789456', 'MA8901234', '2029-07-22', '0668901234', 'zineb.sqalli@email.com', 'Meknès', 'actif');
    ");

    // Demo inscriptions
    $db->exec("
        INSERT INTO inscriptions (voyageur_id, programme_id, formule, num_dossier, statut_visa, vaccination, prix_total, montant_paye, statut_paiement, status)
        VALUES
        (1, 1, 'double', 'HAJ-D001', 'confirme', 'oui', 85000, 85000, 'paye', 'en_cours'),
        (2, 1, 'quadruple', 'HAJ-D002', 'en_attente', 'oui', 65000, 40000, 'partiel', 'en_cours'),
        (3, 1, 'triple', 'HAJ-D003', 'confirme', 'non', 75000, 75000, 'paye', 'en_cours'),
        (4, 2, 'double', 'OMR-D001', 'confirme', 'oui', 35000, 35000, 'paye', 'en_cours'),
        (5, 2, 'quadruple', 'OMR-D002', 'en_attente', 'oui', 25000, 15000, 'partiel', 'en_cours'),
        (6, 4, 'quintuple', 'VOY-D001', 'confirme', 'oui', 12000, 12000, 'paye', 'en_cours'),
        (7, 1, 'quadruple', 'HAJ-D004', 'refuse', 'oui', 65000, 0, 'impaye', 'annule'),
        (8, 2, 'triple', 'OMR-D003', 'confirme', 'oui', 30000, 30000, 'partiel', 'en_cours');
    ");

    // Demo paiements
    $db->exec("
        INSERT INTO paiements (inscription_id, voyageur_id, montant, mode_paiement, reference_paiement, date_paiement, created_by)
        VALUES
        (1, 1, 50000, 'virement', 'VIR-20260115', '2026-01-15', 1),
        (1, 1, 35000, 'especes', 'ESP-20260201', '2026-02-01', 1),
        (2, 2, 25000, 'cheque', 'CHQ-20260120', '2026-01-20', 1),
        (2, 2, 15000, 'especes', 'ESP-20260210', '2026-02-10', 1),
        (3, 3, 120000, 'virement', 'VIR-20260105', '2026-01-05', 1),
        (4, 4, 35000, 'virement', 'VIR-20260201', '2026-02-01', 1),
        (5, 5, 15000, 'especes', 'ESP-20260215', '2026-02-15', 1),
        (6, 6, 12000, 'carte', 'CB-20260301', '2026-03-01', 1),
        (8, 8, 30000, 'virement', 'VIR-20260220', '2026-02-20', 1);
    ");

    // Demo depenses
    $db->exec("
        INSERT INTO depenses (programme_id, categorie, description, montant, date_depense, fournisseur, created_by)
        VALUES
        (1, 'hotel', 'Réservation Hilton Suites Makkah - 50 chambres', 450000, '2026-01-10', 'Hilton Suites Makkah', 1),
        (1, 'vol', 'Billets aller-retour RAM - 47 pax', 399500, '2026-01-15', 'Royal Air Maroc', 1),
        (1, 'visa', 'Frais visa Hajj - 47 dossiers', 47000, '2026-02-01', 'Consulat Arabie Saoudite', 1),
        (1, 'transport', 'Bus Jeddah-Makkah-Madinah', 85000, '2026-01-20', 'Saudi Transport Co.', 1),
        (2, 'hotel', 'Réservation Al Haram Hotel - 20 chambres', 120000, '2026-01-25', 'Al Haram Hotel', 1),
        (2, 'vol', 'Billets Saudia - 32 pax', 192000, '2026-02-01', 'Saudia Airlines', 1);
    ");

    // Demo groupes
    $db->exec("
        INSERT INTO groupes (nom, type, programme_id, chef_groupe, chef_groupe_tel, capacite)
        VALUES
        ('Groupe Hajj A - Casablanca', 'hajj', 1, 'Si Mohammed Alami', '0661112233', 25),
        ('Groupe Hajj B - Rabat', 'hajj', 1, 'Si Abdellah Bennani', '0662223344', 25),
        ('Groupe Omra Ramadan 1', 'omra', 2, 'Si Hassan Tazi', '0663334455', 40),
        ('Groupe Istanbul', 'tourisme', 4, 'Mme Laila Chraibi', '0664445566', 40);
    ");
}

echo '<!DOCTYPE html><html lang="fr"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Installation - UpTours</title>
<link href="' . APP_URL . '/assets/css/bootstrap.min.css" rel="stylesheet">
</head><body class="bg-light">
<div class="container py-5">
<div class="row justify-content-center"><div class="col-md-6">
<div class="card shadow"><div class="card-body text-center p-5">
<h1 class="text-success mb-3">✅ Installation réussie!</h1>
<p class="lead">La base de données a été créée avec succès.</p>
<hr>
<p><strong>Identifiants par défaut:</strong></p>
<p>Utilisateur: <code>admin</code><br>Mot de passe: <code>admin123</code></p>
<a href="login.php" class="btn btn-primary btn-lg mt-3">🔑 Se connecter</a>
</div></div></div></div></div></body></html>';
