<?php
/**
 * Script de migration de la table medias
 * Ce script migre les médias en tenant compte des changements de structure
 * et de la transformation de support_rowid en support_id
 */

// 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 medias
    $deleteQuery = "DELETE FROM medias";
    $targetDb->exec($deleteQuery);
    
    // 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 des médias depuis la source
    $query = "SELECT * FROM medias";
    $stmt = $sourceDb->query($query);
    $medias = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // Préparation de la requête d'insertion
    $insertQuery = "INSERT INTO medias (
        support,
        support_id,
        fichier,
        description,
        created_at,
        fk_user_creat,
        updated_at,
        fk_user_modif
    ) VALUES (
        :support,
        :support_id,
        :fichier,
        :description,
        :created_at,
        :fk_user_creat,
        :updated_at,
        :fk_user_modif
    )";
    
    $insertStmt = $targetDb->prepare($insertQuery);
    
    // Compteurs pour le suivi
    $inserted = 0;
    $skipped = 0;
    $errors = 0;
    
    // Traitement de chaque média
    foreach ($medias as $media) {
        // Vérifier si l'utilisateur de création existe dans la table users de la cible
        $fkUserCreat = $media['fk_user_creat'] ?? 0;
        if ($fkUserCreat > 0 && !in_array($fkUserCreat, $migratedUsers)) {
            // L'utilisateur n'a pas été migré, on utilise 0 (système)
            $fkUserCreat = 0;
        }
        
        // Vérifier si l'utilisateur de modification existe dans la table users de la cible
        $fkUserModif = $media['fk_user_modif'] ?? 0;
        if ($fkUserModif > 0 && !in_array($fkUserModif, $migratedUsers)) {
            // L'utilisateur n'a pas été migré, on utilise 0 (système)
            $fkUserModif = 0;
        }
        
        // Conversion des dates
        $createdAt = !empty($media['date_creat']) ? date('Y-m-d H:i:s', strtotime($media['date_creat'])) : date('Y-m-d H:i:s');
        $updatedAt = !empty($media['date_modif']) ? date('Y-m-d H:i:s', strtotime($media['date_modif'])) : null;
        
        // Préparation des données pour l'insertion
        $mediaData = [
            'support' => $media['support'] ?? '',
            'support_id' => $media['support_rowid'] ?? 0, // Transformation de support_rowid en support_id
            'fichier' => $media['fichier'] ?? '',
            'description' => $media['description'] ?? '',
            'created_at' => $createdAt,
            'fk_user_creat' => $fkUserCreat,
            'updated_at' => $updatedAt,
            'fk_user_modif' => $fkUserModif
        ];
        
        try {
            // Insertion dans la table cible
            $insertStmt->execute($mediaData);
            $inserted++;
        } catch (PDOException $e) {
            echo "ERREUR: Migration du média : " . $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 medias." . 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);
}
