<?php
/**
 * Migración - Agregar columnas para edición y eliminación de mensajes
 * Fecha: 28 de enero de 2026
 */

require_once 'config/config.php';

echo "<h2>Migración: Columnas para editar/eliminar mensajes</h2>\n";
echo "<pre>\n";

try {
    $db = Database::getInstance();
    
    // Verificar si las columnas ya existen
    $columns = [];
    $result = $db->fetchAll("SHOW COLUMNS FROM conversations");
    foreach ($result as $row) {
        $columns[] = $row['Field'];
    }
    
    $migrationsNeeded = [];
    
    // Columna edited_at
    if (!in_array('edited_at', $columns)) {
        $migrationsNeeded[] = [
            'column' => 'edited_at',
            'sql' => "ALTER TABLE conversations ADD COLUMN edited_at DATETIME NULL DEFAULT NULL COMMENT 'Fecha de última edición'"
        ];
    } else {
        echo "✅ Columna 'edited_at' ya existe\n";
    }
    
    // Columna deleted_at (para soft delete)
    if (!in_array('deleted_at', $columns)) {
        $migrationsNeeded[] = [
            'column' => 'deleted_at',
            'sql' => "ALTER TABLE conversations ADD COLUMN deleted_at DATETIME NULL DEFAULT NULL COMMENT 'Fecha de eliminación (soft delete)'"
        ];
    } else {
        echo "✅ Columna 'deleted_at' ya existe\n";
    }
    
    // Columna original_content (para guardar contenido original antes de eliminar)
    if (!in_array('original_content', $columns)) {
        $migrationsNeeded[] = [
            'column' => 'original_content',
            'sql' => "ALTER TABLE conversations ADD COLUMN original_content TEXT NULL DEFAULT NULL COMMENT 'Contenido original (antes de eliminar)'"
        ];
    } else {
        echo "✅ Columna 'original_content' ya existe\n";
    }
    
    // Ejecutar migraciones pendientes
    if (count($migrationsNeeded) > 0) {
        echo "\n📦 Ejecutando " . count($migrationsNeeded) . " migración(es)...\n\n";
        
        foreach ($migrationsNeeded as $migration) {
            echo "➡️ Agregando columna '{$migration['column']}'...\n";
            try {
                $db->execute($migration['sql']);
                echo "   ✅ Columna '{$migration['column']}' agregada correctamente\n";
            } catch (Exception $e) {
                echo "   ❌ Error: " . $e->getMessage() . "\n";
            }
        }
        
        // Agregar índice para optimizar búsquedas de mensajes no eliminados
        echo "\n➡️ Verificando índices...\n";
        try {
            $indexes = $db->fetchAll("SHOW INDEX FROM conversations WHERE Key_name = 'idx_deleted_at'");
            if (empty($indexes)) {
                $db->execute("ALTER TABLE conversations ADD INDEX idx_deleted_at (deleted_at)");
                echo "   ✅ Índice 'idx_deleted_at' creado\n";
            } else {
                echo "   ✅ Índice 'idx_deleted_at' ya existe\n";
            }
        } catch (Exception $e) {
            echo "   ⚠️ Índice no pudo crearse: " . $e->getMessage() . "\n";
        }
        
        echo "\n✅ Migración completada!\n";
    } else {
        echo "\n✅ No hay migraciones pendientes. La base de datos está actualizada.\n";
    }
    
    // Mostrar estructura actual de la tabla
    echo "\n📋 Estructura actual de la tabla 'conversations':\n";
    echo str_repeat('-', 60) . "\n";
    $result = $db->fetchAll("SHOW COLUMNS FROM conversations");
    foreach ($result as $row) {
        $null = $row['Null'] === 'YES' ? 'NULL' : 'NOT NULL';
        $default = $row['Default'] !== null ? "DEFAULT '{$row['Default']}'" : '';
        echo sprintf("  %-25s %-20s %s %s\n", $row['Field'], $row['Type'], $null, $default);
    }
    
} catch (Exception $e) {
    echo "❌ Error fatal: " . $e->getMessage() . "\n";
    echo "Stack trace: " . $e->getTraceAsString() . "\n";
}

echo "</pre>\n";
echo "<p><a href='conversations.php'>← Volver a conversaciones</a></p>\n";
