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

echo '<h1>Mise à jour de la table expenses</h1>';

try {
    // Ouvrir une connexion directe à la base de données
    $dbFile = __DIR__ . '/database/association.db';
    $db = new PDO('sqlite:' . $dbFile);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Vérifier si la table expenses existe
    $tableQuery = "SELECT name FROM sqlite_master WHERE type='table' AND name='expenses'";
    $tableExists = $db->query($tableQuery)->fetchColumn();
    
    if (!$tableExists) {
        echo '<div style="color: red;">La table expenses n\'existe pas!</div>';
        
        // Créer la table expenses
        $createTableQuery = "CREATE TABLE IF NOT EXISTS expenses (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            amount DECIMAL(10, 2) NOT NULL,
            category VARCHAR(50) NOT NULL,
            description TEXT NOT NULL,
            payment_method VARCHAR(50) NOT NULL,
            receipt_number VARCHAR(100),
            receipt_file VARCHAR(255),
            payment_date DATE NOT NULL,
            date DATE,
            notes TEXT,
            created_by INTEGER,
            created_at DATETIME,
            updated_by INTEGER,
            updated_at DATETIME,
            FOREIGN KEY (created_by) REFERENCES users(id),
            FOREIGN KEY (updated_by) REFERENCES users(id)
        )";
        
        $db->exec($createTableQuery);
        echo '<div style="color: green;">Table expenses créée avec succès.</div>';
    } else {
        // Vérifier si les colonnes payment_date et date existent
        $columnsQuery = "PRAGMA table_info(expenses)";
        $stmt = $db->query($columnsQuery);
        $columns = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        $paymentDateExists = false;
        $dateExists = false;
        foreach ($columns as $column) {
            if ($column['name'] === 'payment_date') {
                $paymentDateExists = true;
            }
            if ($column['name'] === 'date') {
                $dateExists = true;
            }
        }
        
        // Ajouter la colonne payment_date si elle n'existe pas
        if (!$paymentDateExists) {
            $alterQuery = "ALTER TABLE expenses ADD COLUMN payment_date DATE";
            $db->exec($alterQuery);
            echo '<div style="color: green;">Colonne payment_date ajoutée à la table expenses.</div>';
        }
        
        // Ajouter la colonne date si elle n'existe pas
        if (!$dateExists) {
            $alterQuery = "ALTER TABLE expenses ADD COLUMN date DATE";
            $db->exec($alterQuery);
            echo '<div style="color: green;">Colonne date ajoutée à la table expenses.</div>';
            
            // Mettre à jour la colonne date avec les valeurs de payment_date
            $updateQuery = "UPDATE expenses SET date = payment_date WHERE payment_date IS NOT NULL";
            $db->exec($updateQuery);
            echo '<div style="color: green;">Les valeurs de date ont été synchronisées avec payment_date.</div>';
        }
    }
    
    // Vérifier la structure de la table après modification
    echo '<h2>Structure de la table expenses après modification</h2>';
    $stmt = $db->query("PRAGMA table_info(expenses)");
    $updatedColumns = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    echo '<table border="1" cellpadding="5" style="border-collapse: collapse;">';
    echo '<tr><th>ID</th><th>Nom</th><th>Type</th><th>Not Null</th><th>Default</th><th>PK</th></tr>';
    
    foreach ($updatedColumns as $column) {
        echo '<tr>';
        echo '<td>' . $column['cid'] . '</td>';
        echo '<td>' . $column['name'] . '</td>';
        echo '<td>' . $column['type'] . '</td>';
        echo '<td>' . $column['notnull'] . '</td>';
        echo '<td>' . $column['dflt_value'] . '</td>';
        echo '<td>' . $column['pk'] . '</td>';
        echo '</tr>';
    }
    
    echo '</table>';
    
    // Vérifier les données dans la table
    $dataQuery = "SELECT id, amount, category, payment_date, date FROM expenses LIMIT 10";
    $stmt = $db->query($dataQuery);
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (count($rows) > 0) {
        echo '<h2>Données dans la table expenses (10 premières lignes)</h2>';
        echo '<table border="1" cellpadding="5" style="border-collapse: collapse;">';
        echo '<tr><th>ID</th><th>Montant</th><th>Catégorie</th><th>payment_date</th><th>date</th></tr>';
        
        foreach ($rows as $row) {
            echo '<tr>';
            echo '<td>' . $row['id'] . '</td>';
            echo '<td>' . $row['amount'] . '</td>';
            echo '<td>' . $row['category'] . '</td>';
            echo '<td>' . $row['payment_date'] . '</td>';
            echo '<td>' . $row['date'] . '</td>';
            echo '</tr>';
        }
        
        echo '</table>';
    } else {
        echo '<div style="color: blue;">Aucune donnée trouvée dans la table expenses.</div>';
    }
    
    echo '<h2>Mise à jour terminée avec succès !</h2>';
    echo '<a href="finance/expenses/add.php" class="btn btn-primary">Retourner à la page d\'ajout de dépenses</a> ';
    echo '<a href="finance/expenses/index.php" class="btn btn-info">Voir la liste des dépenses</a>';
    
} catch (PDOException $e) {
    echo '<div style="color: red; font-weight: bold;">Erreur: ' . $e->getMessage() . '</div>';
}
?>
