<?php
/**
 * Script d'exécution de la mise à jour des soldes des factures restaurant
 * StayManager - Amélioration du système financier
 */

// Configuration de base
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Inclure la configuration de la base de données
require_once __DIR__ . '/config/config.php';

try {
    // Initialiser la connexion à la base de données
    $db = new Database();
    $pdo = $db->getConnection();
    
    echo "<h2>Mise à jour des soldes des factures restaurant</h2>\n";
    echo "<p>Début de l'exécution : " . date('Y-m-d H:i:s') . "</p>\n";
    
    // Lire le fichier SQL
    $sqlFile = __DIR__ . '/update_restaurant_invoices_balance.sql';
    if (!file_exists($sqlFile)) {
        throw new Exception("Fichier SQL non trouvé : $sqlFile");
    }
    
    $sql = file_get_contents($sqlFile);
    if ($sql === false) {
        throw new Exception("Impossible de lire le fichier SQL");
    }
    
    // Diviser le script en requêtes individuelles
    $queries = array_filter(array_map('trim', explode(';', $sql)));
    
    $successCount = 0;
    $errorCount = 0;
    $errors = [];
    
    foreach ($queries as $query) {
        if (empty($query) || strpos($query, '--') === 0) {
            continue;
        }
        
        try {
            // Exécuter la requête
            $pdo->exec($query);
            $successCount++;
            
            // Afficher le progrès pour les requêtes importantes
            if (stripos($query, 'ALTER TABLE') !== false) {
                echo "<p>✓ Table modifiée avec succès</p>\n";
            } elseif (stripos($query, 'CREATE TRIGGER') !== false) {
                echo "<p>✓ Trigger créé avec succès</p>\n";
            } elseif (stripos($query, 'CREATE VIEW') !== false) {
                echo "<p>✓ Vue créée avec succès</p>\n";
            } elseif (stripos($query, 'CREATE FUNCTION') !== false) {
                echo "<p>✓ Fonction créée avec succès</p>\n";
            } elseif (stripos($query, 'CREATE PROCEDURE') !== false) {
                echo "<p>✓ Procédure créée avec succès</p>\n";
            } elseif (stripos($query, 'CALL') !== false) {
                echo "<p>✓ Procédure exécutée avec succès</p>\n";
            }
            
        } catch (PDOException $e) {
            $errorCount++;
            $errors[] = [
                'query' => substr($query, 0, 100) . '...',
                'error' => $e->getMessage()
            ];
            echo "<p style='color: red;'>✗ Erreur : " . $e->getMessage() . "</p>\n";
        }
    }
    
    // Afficher le résumé
    echo "<h3>Résumé de l'exécution</h3>\n";
    echo "<p>Requêtes exécutées avec succès : <strong>$successCount</strong></p>\n";
    echo "<p>Erreurs rencontrées : <strong>$errorCount</strong></p>\n";
    
    if ($errorCount > 0) {
        echo "<h4>Détails des erreurs :</h4>\n";
        echo "<ul>\n";
        foreach ($errors as $error) {
            echo "<li><strong>Requête :</strong> " . htmlspecialchars($error['query']) . "<br>";
            echo "<strong>Erreur :</strong> " . htmlspecialchars($error['error']) . "</li>\n";
        }
        echo "</ul>\n";
    }
    
    // Vérifier les résultats
    echo "<h3>Vérification des résultats</h3>\n";
    
    // Compter les factures avec solde
    $stmt = $pdo->query("
        SELECT 
            COUNT(*) as total_invoices,
            SUM(balance) as total_balance,
            COUNT(CASE WHEN balance > 0 THEN 1 END) as unpaid_invoices,
            COUNT(CASE WHEN balance = 0 AND payment_status = 'paid' THEN 1 END) as paid_invoices
        FROM restaurant_invoices
    ");
    $stats = $stmt->fetch(PDO::FETCH_ASSOC);
    
    echo "<table border='1' style='border-collapse: collapse; margin: 10px 0;'>\n";
    echo "<tr><th>Statistique</th><th>Valeur</th></tr>\n";
    echo "<tr><td>Total des factures</td><td>" . $stats['total_invoices'] . "</td></tr>\n";
    echo "<tr><td>Factures avec solde</td><td>" . $stats['unpaid_invoices'] . "</td></tr>\n";
    echo "<tr><td>Factures payées</td><td>" . $stats['paid_invoices'] . "</td></tr>\n";
    echo "<tr><td>Solde total à recouvrer</td><td>" . number_format($stats['total_balance'], 2) . " FCFA</td></tr>\n";
    echo "</table>\n";
    
    // Afficher quelques exemples
    echo "<h4>Exemples de factures avec solde :</h4>\n";
    $stmt = $pdo->query("
        SELECT 
            ri.invoice_number,
            CONCAT(c.first_name, ' ', c.last_name) as client_name,
            ri.total_amount,
            ri.balance,
            (ri.total_amount - ri.balance) as paid_amount,
            ri.payment_status
        FROM restaurant_invoices ri
        JOIN clients c ON ri.client_id = c.id
        WHERE ri.balance > 0
        ORDER BY ri.invoice_date DESC
        LIMIT 10
    ");
    
    if ($stmt->rowCount() > 0) {
        echo "<table border='1' style='border-collapse: collapse; margin: 10px 0;'>\n";
        echo "<tr><th>N° Facture</th><th>Client</th><th>Total</th><th>Solde</th><th>Payé</th><th>Statut</th></tr>\n";
        
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            echo "<tr>\n";
            echo "<td>" . htmlspecialchars($row['invoice_number']) . "</td>\n";
            echo "<td>" . htmlspecialchars($row['client_name']) . "</td>\n";
            echo "<td>" . number_format($row['total_amount'], 2) . " FCFA</td>\n";
            echo "<td style='color: red;'>" . number_format($row['balance'], 2) . " FCFA</td>\n";
            echo "<td>" . number_format($row['paid_amount'], 2) . " FCFA</td>\n";
            echo "<td>" . htmlspecialchars($row['payment_status']) . "</td>\n";
            echo "</tr>\n";
        }
        echo "</table>\n";
    } else {
        echo "<p>Aucune facture avec solde trouvée.</p>\n";
    }
    
    echo "<p><strong>Mise à jour terminée avec succès !</strong></p>\n";
    echo "<p>Fin de l'exécution : " . date('Y-m-d H:i:s') . "</p>\n";
    
} catch (Exception $e) {
    echo "<h3 style='color: red;'>Erreur fatale :</h3>\n";
    echo "<p style='color: red;'>" . htmlspecialchars($e->getMessage()) . "</p>\n";
    echo "<p>Veuillez vérifier la configuration de la base de données et réessayer.</p>\n";
}

// Bouton pour retourner au dashboard
echo "<br><a href='dashboard.php' style='background: #007cba; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px;'>Retour au Dashboard</a>\n";
?>






