<?php
/**
 * Migration: Ajouter les tables pour la facturation et devis
 */
require_once __DIR__ . '/config/app.php';

$db = getDB();
echo "<h2>Migration: Section Facturation et Devis</h2>";
$db->beginTransaction();

try {
    // 1. Create `devis` table
    $db->exec("
        CREATE TABLE IF NOT EXISTS devis (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            numero TEXT NOT NULL UNIQUE, -- Format: DEV-YYYYMM-XXXX
            voyageur_id INTEGER NOT NULL,
            date_devis TEXT NOT NULL,
            date_validite TEXT,
            statut TEXT DEFAULT 'brouillon', -- brouillon, envoye, accepte, refuse, facture
            montant_ht REAL DEFAULT 0,
            montant_tva REAL DEFAULT 0,
            taux_tva REAL DEFAULT 0,
            montant_ttc REAL DEFAULT 0,
            notes TEXT,
            conditions TEXT,
            created_by INTEGER,
            created_at TEXT DEFAULT (datetime('now')),
            updated_at TEXT DEFAULT (datetime('now')),
            FOREIGN KEY (voyageur_id) REFERENCES voyageurs(id),
            FOREIGN KEY (created_by) REFERENCES users(id)
        )
    ");
    echo "<p>✅ Table `devis` créée avec succès.</p>";

    // 2. Create `factures` table
    $db->exec("
        CREATE TABLE IF NOT EXISTS factures (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            numero TEXT NOT NULL UNIQUE, -- Format: FAC-YYYYMM-XXXX
            devis_id INTEGER, -- Optional link to a quote
            inscription_id INTEGER, -- Optional link to an inscription
            service_id INTEGER, -- Optional link to a service
            voyageur_id INTEGER NOT NULL,
            date_facture TEXT NOT NULL,
            date_echeance TEXT,
            statut TEXT DEFAULT 'brouillon', -- brouillon, envoye, payee, partielle, annulee
            montant_ht REAL DEFAULT 0,
            montant_tva REAL DEFAULT 0,
            taux_tva REAL DEFAULT 0,
            montant_ttc REAL DEFAULT 0,
            notes TEXT,
            conditions TEXT,
            created_by INTEGER,
            created_at TEXT DEFAULT (datetime('now')),
            updated_at TEXT DEFAULT (datetime('now')),
            FOREIGN KEY (devis_id) REFERENCES devis(id),
            FOREIGN KEY (inscription_id) REFERENCES inscriptions(id),
            FOREIGN KEY (service_id) REFERENCES services(id),
            FOREIGN KEY (voyageur_id) REFERENCES voyageurs(id),
            FOREIGN KEY (created_by) REFERENCES users(id)
        )
    ");
    echo "<p>✅ Table `factures` créée avec succès.</p>";

    // 3. Create `devis_lignes` table
    $db->exec("
        CREATE TABLE IF NOT EXISTS devis_lignes (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            devis_id INTEGER NOT NULL,
            description TEXT NOT NULL,
            quantite INTEGER DEFAULT 1,
            prix_unitaire REAL DEFAULT 0,
            total_ligne REAL DEFAULT 0,
            FOREIGN KEY (devis_id) REFERENCES devis(id) ON DELETE CASCADE
        )
    ");
    echo "<p>✅ Table `devis_lignes` créée avec succès.</p>";

    // 4. Create `facture_lignes` table
    $db->exec("
        CREATE TABLE IF NOT EXISTS facture_lignes (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            facture_id INTEGER NOT NULL,
            description TEXT NOT NULL,
            quantite INTEGER DEFAULT 1,
            prix_unitaire REAL DEFAULT 0,
            total_ligne REAL DEFAULT 0,
            FOREIGN KEY (facture_id) REFERENCES factures(id) ON DELETE CASCADE
        )
    ");
    echo "<p>✅ Table `facture_lignes` créée avec succès.</p>";
    
    // 5. Add facture_id to paiements to link payments directly to invoices
    $columns = $db->query("PRAGMA table_info(paiements)")->fetchAll();
    $colNames = array_column($columns, 'name');
    
    if (!in_array('facture_id', $colNames)) {
        $db->exec("ALTER TABLE paiements ADD COLUMN facture_id INTEGER REFERENCES factures(id)");
        echo "<p>✅ Colonne `facture_id` ajoutée à la table `paiements`.</p>";
    }

    $db->commit();
    echo "<h3 style='color: green;'>✅ Migration Facturation terminée avec succès!</h3>";
    
} catch (Exception $e) {
    $db->rollBack();
    echo "<h3 style='color: red;'>❌ Erreur lors de la migration: " . $e->getMessage() . "</h3>";
}
