<?php
/**
 * Script de migration de la table ope_pass_histo
 * Ce script ne migre que les historiques dont le fk_pass existe dans la table ope_pass de la base cible
 */

// Inclusion des fichiers nécessaires
require_once __DIR__ . '/../config.php';

// Fonction principale de migration
try {
    // Établissement des connexions aux bases de données
    $sourceDb = getSourceConnection();
    $targetDb = getTargetConnection();
    
    // Début de la migration silencieuse (n'affiche que les erreurs)
    
    // Suppression de toutes les données existantes dans la table ope_pass_histo
    $deleteQuery = "DELETE FROM ope_pass_histo";
    $targetDb->exec($deleteQuery);
    
    // Récupération des IDs des passages qui ont été migrés
    $stmt = $targetDb->query("SELECT id FROM ope_pass");
    $migratedPasses = $stmt->fetchAll(PDO::FETCH_COLUMN);

    if (empty($migratedPasses)) {
        echo "ERREUR: Aucun passage n'a été migré. Veuillez d'abord migrer la table ope_pass." . PHP_EOL;
        closeSshTunnel();
        exit(1);
    }
    
    // Récupération des IDs des utilisateurs qui ont été migrés
    $stmt = $targetDb->query("SELECT id FROM users");
    $migratedUsers = $stmt->fetchAll(PDO::FETCH_COLUMN);

    if (empty($migratedUsers)) {
        echo "ERREUR: Aucun utilisateur n'a été migré. Veuillez d'abord migrer la table users." . PHP_EOL;
        closeSshTunnel();
        exit(1);
    }
    
    // Récupération directe des IDs des passages dans la table cible
    $stmt = $targetDb->query("SELECT id FROM ope_pass");
    $migratedPassIds = $stmt->fetchAll(PDO::FETCH_COLUMN);
    
    if (empty($migratedPassIds)) {
        echo "ERREUR: Aucun passage n'a été migré. Veuillez d'abord migrer la table ope_pass." . PHP_EOL;
        closeSshTunnel();
        exit(1);
    }
    
    // Récupération des historiques de passages depuis la source
    $query = "SELECT * FROM ope_pass_histo";
    
    $stmt = $sourceDb->query($query);
    $histos = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // Préparation de la requête d'insertion
    $insertQuery = "INSERT INTO ope_pass_histo (
        fk_pass,
        date_histo,
        sujet,
        remarque
    ) VALUES (
        :fk_pass,
        :date_histo,
        :sujet,
        :remarque
    )";
    
    $insertStmt = $targetDb->prepare($insertQuery);
    
    // Compteurs pour le suivi
    $inserted = 0;
    $skipped = 0;
    $errors = 0;
    
    // Traitement de chaque historique
    foreach ($histos as $histo) {
        // Vérifier si l'ID du passage existe dans la table cible
        $fkPass = $histo['fk_pass'];
        if (!in_array($fkPass, $migratedPassIds)) {
            // Le passage n'a pas été migré, on ignore cet historique
            $skipped++;
            continue;
        }
        
        // On ignore le champ fk_user qui n'existe plus dans la table cible
        
        // Conversion des dates
        $dateHisto = !empty($histo['date_histo']) ? date('Y-m-d H:i:s', strtotime($histo['date_histo'])) : null;
        
        // Préparation des données pour l'insertion
        $histoData = [
            'fk_pass' => $fkPass,
            'date_histo' => $dateHisto,
            'sujet' => $histo['sujet'] ?? '',
            'remarque' => $histo['remarque'] ?? ''
        ];
        
        try {
            // Insertion dans la table cible
            $insertStmt->execute($histoData);
            $inserted++;
        } catch (PDOException $e) {
            echo "ERREUR: Migration de l'historique (rowid {$histo['rowid']}, passage {$fkPass}) : " . $e->getMessage() . "\n";
            $errors++;
        }
    }
    
    // Afficher uniquement s'il y a des erreurs
    if ($errors > 0) {
        echo "ERREUR: $errors erreurs lors de la migration de la table ope_pass_histo." . PHP_EOL;
    }
    
    // Fermer le tunnel SSH
    closeSshTunnel();
    
} catch (Exception $e) {
    echo "ERREUR CRITIQUE: " . $e->getMessage() . PHP_EOL;

    // Fermer le tunnel SSH en cas d'erreur
    closeSshTunnel();
    
    exit(1);
}
