<?php
/**
 * Migrador de Sistema de Contraseñas a Base de Datos
 * WhatsApp Bot Manager - Migración Automática
 * Fecha: 4 de enero de 2026
 */

require_once 'config/config.php';

// Solo permitir acceso desde localhost por seguridad
$allowedIPs = ['127.0.0.1', '::1', 'localhost'];
$clientIP = $_SERVER['REMOTE_ADDR'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? 'unknown';

if (!in_array($clientIP, $allowedIPs) && $clientIP !== 'unknown') {
    die("❌ Acceso denegado. Esta utilidad solo puede ejecutarse desde localhost por seguridad.");
}

?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>🔄 Migración a Sistema de BD - WhatsApp Bot Manager</title>
    <style>
        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
            background: linear-gradient(135deg, #25D366 0%, #128C7E 100%);
            color: #333;
            margin: 0;
            padding: 20px;
            min-height: 100vh;
        }
        .container {
            max-width: 800px;
            margin: 0 auto;
            background: white;
            padding: 40px;
            border-radius: 15px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.2);
        }
        h1 {
            color: #25D366;
            text-align: center;
            margin-bottom: 30px;
        }
        .progress-box {
            background: #f8f9fa;
            padding: 20px;
            border-radius: 10px;
            margin: 20px 0;
            border: 2px solid #dee2e6;
        }
        .success-box {
            background: #d4edda;
            padding: 20px;
            border-left: 5px solid #28a745;
            margin: 20px 0;
            border-radius: 5px;
        }
        .error-box {
            background: #f8d7da;
            padding: 20px;
            border-left: 5px solid #dc3545;
            margin: 20px 0;
            border-radius: 5px;
        }
        .warning-box {
            background: #fff3cd;
            padding: 20px;
            border-left: 5px solid #ffc107;
            margin: 20px 0;
            border-radius: 5px;
        }
        .btn {
            background: #25D366;
            color: white;
            padding: 15px 30px;
            border: none;
            border-radius: 8px;
            font-size: 16px;
            cursor: pointer;
            text-decoration: none;
            display: inline-block;
            margin: 10px 0;
        }
        .btn:hover {
            background: #1aa347;
        }
        .code-block {
            background: #f8f9fa;
            padding: 15px;
            border-radius: 5px;
            font-family: monospace;
            border: 1px solid #dee2e6;
            margin: 10px 0;
            overflow-x: auto;
        }
        .step {
            margin: 20px 0;
            padding: 15px;
            border-radius: 8px;
        }
        .step-pending {
            background: #e9ecef;
            border-left: 4px solid #6c757d;
        }
        .step-running {
            background: #fff3cd;
            border-left: 4px solid #ffc107;
        }
        .step-completed {
            background: #d4edda;
            border-left: 4px solid #28a745;
        }
        .step-error {
            background: #f8d7da;
            border-left: 4px solid #dc3545;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>🔄 Migración a Sistema de Base de Datos</h1>
        
        <?php
        try {
            $pdo = new PDO(
                "mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET,
                DB_USER,
                DB_PASS,
                [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]
            );
            
            echo '<div class="success-box">✅ <strong>Conexión a base de datos exitosa</strong></div>';
            
            // Verificar si ya está migrado
            $checkTable = $pdo->query("SHOW TABLES LIKE 'admin_users'");
            $alreadyMigrated = $checkTable->rowCount() > 0;
            
            if ($alreadyMigrated && !isset($_GET['force'])) {
                echo '<div class="warning-box">';
                echo '<h3>⚠️ Sistema Ya Migrado</h3>';
                echo '<p>El sistema de autenticación ya ha sido migrado a la base de datos.</p>';
                echo '<p><a href="gestion_admin_unificada.php" class="btn">🛠️ Ir a Gestión de Administradores</a></p>';
                echo '<p><a href="?force=1" class="btn" style="background: #dc3545;">⚠️ Forzar Re-migración</a></p>';
                echo '</div>';
                exit;
            }
            
            // Ejecutar migración
            if (isset($_GET['migrate']) || isset($_GET['force'])) {
                echo '<div class="progress-box">';
                echo '<h3>🚀 Ejecutando Migración...</h3>';
                
                $steps = [
                    'create_table' => 'Crear tabla admin_users',
                    'migrate_admin' => 'Migrar usuario administrador existente',
                    'verify_data' => 'Verificar datos migrados',
                    'update_config' => 'Actualizar configuración del sistema'
                ];
                
                $results = [];
                
                // Paso 1: Crear tabla
                echo '<div class="step step-running" id="step-create-table">';
                echo '<h4>📋 Paso 1: Creando tabla admin_users...</h4>';
                try {
                    if ($alreadyMigrated) {
                        $pdo->exec("DROP TABLE IF EXISTS admin_users");
                        echo '<p>- Tabla existente eliminada (re-migración)</p>';
                    }
                    
                    $createTableSQL = "
                    CREATE TABLE admin_users (
                        id INT AUTO_INCREMENT PRIMARY KEY,
                        username VARCHAR(50) UNIQUE NOT NULL,
                        password_hash VARCHAR(255) NOT NULL,
                        full_name VARCHAR(100),
                        email VARCHAR(100),
                        is_active BOOLEAN DEFAULT TRUE,
                        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                        last_login TIMESTAMP NULL
                    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
                    
                    $pdo->exec($createTableSQL);
                    echo '<p>✅ Tabla admin_users creada exitosamente</p>';
                    $results['create_table'] = true;
                } catch (Exception $e) {
                    echo '<p>❌ Error creando tabla: ' . $e->getMessage() . '</p>';
                    $results['create_table'] = false;
                }
                echo '</div>';
                
                // Paso 2: Migrar usuario admin
                echo '<div class="step step-running" id="step-migrate-admin">';
                echo '<h4>👤 Paso 2: Migrando usuario administrador...</h4>';
                try {
                    if (defined('ADMIN_PASSWORD')) {
                        $stmt = $pdo->prepare("
                            INSERT INTO admin_users (username, password_hash, full_name, email, is_active) 
                            VALUES (?, ?, ?, ?, ?)
                        ");
                        
                        $stmt->execute([
                            'admin',
                            ADMIN_PASSWORD, // Ya está hasheado
                            'Administrador Principal',
                            'admin@' . ($_SERVER['HTTP_HOST'] ?? 'localhost'),
                            1
                        ]);
                        
                        echo '<p>✅ Usuario admin migrado con contraseña existente</p>';
                        echo '<p>- Usuario: <strong>admin</strong></p>';
                        echo '<p>- Contraseña: <em>La misma que usabas antes</em></p>';
                        $results['migrate_admin'] = true;
                    } else {
                        echo '<p>❌ No se encontró ADMIN_PASSWORD en config.php</p>';
                        $results['migrate_admin'] = false;
                    }
                } catch (Exception $e) {
                    echo '<p>❌ Error migrando admin: ' . $e->getMessage() . '</p>';
                    $results['migrate_admin'] = false;
                }
                echo '</div>';
                
                // Paso 3: Verificar datos
                echo '<div class="step step-running" id="step-verify-data">';
                echo '<h4>🔍 Paso 3: Verificando datos migrados...</h4>';
                try {
                    $stmt = $pdo->query("SELECT * FROM admin_users");
                    $admins = $stmt->fetchAll();
                    
                    if (empty($admins)) {
                        echo '<p>❌ No se encontraron administradores en la tabla</p>';
                        $results['verify_data'] = false;
                    } else {
                        echo '<p>✅ Verificación exitosa. Administradores encontrados:</p>';
                        foreach ($admins as $admin) {
                            echo '<div class="code-block">';
                            echo 'ID: ' . $admin['id'] . ' | Usuario: ' . $admin['username'] . ' | Activo: ' . ($admin['is_active'] ? 'Sí' : 'No');
                            echo '</div>';
                        }
                        $results['verify_data'] = true;
                    }
                } catch (Exception $e) {
                    echo '<p>❌ Error verificando datos: ' . $e->getMessage() . '</p>';
                    $results['verify_data'] = false;
                }
                echo '</div>';
                
                // Paso 4: Actualizar configuración
                echo '<div class="step step-running" id="step-update-config">';
                echo '<h4>⚙️ Paso 4: Actualizando configuración del sistema...</h4>';
                
                // Marcar migración completada
                $migrationFlag = dirname(__FILE__) . '/.auth_migrated';
                if (file_put_contents($migrationFlag, date('Y-m-d H:i:s'))) {
                    echo '<p>✅ Flag de migración creado</p>';
                } else {
                    echo '<p>⚠️ No se pudo crear flag de migración</p>';
                }
                
                echo '<p>✅ Sistema configurado para usar autenticación por BD</p>';
                $results['update_config'] = true;
                echo '</div>';
                
                // Resumen final
                $allSuccess = !in_array(false, $results);
                
                if ($allSuccess) {
                    echo '<div class="success-box">';
                    echo '<h3>🎉 ¡Migración Completada Exitosamente!</h3>';
                    echo '<p>El sistema de autenticación ha sido migrado exitosamente a la base de datos.</p>';
                    echo '<h4>📋 Qué cambió:</h4>';
                    echo '<ul>';
                    echo '<li>✅ Las contraseñas se almacenan ahora en la tabla <code>admin_users</code></li>';
                    echo '<li>✅ Se mantiene retrocompatibilidad durante la transición</li>';
                    echo '<li>✅ El login ahora usa el nuevo sistema unificado</li>';
                    echo '<li>✅ Se pueden crear múltiples administradores</li>';
                    echo '</ul>';
                    echo '<p><a href="gestion_admin_unificada.php" class="btn">🛠️ Gestionar Administradores</a></p>';
                    echo '<p><a href="login.php" class="btn">🔐 Probar Login</a></p>';
                    echo '</div>';
                } else {
                    echo '<div class="error-box">';
                    echo '<h3>❌ Migración Parcial o con Errores</h3>';
                    echo '<p>Algunos pasos fallaron. Revisa los errores arriba y contacta soporte si es necesario.</p>';
                    echo '</div>';
                }
                
                echo '</div>'; // Cierre progress-box
                
            } else {
                // Mostrar información pre-migración
                echo '<div class="warning-box">';
                echo '<h3>📋 Información de la Migración</h3>';
                echo '<p>Este proceso migrará tu sistema de autenticación hardcodeado a un sistema basado en base de datos.</p>';
                
                echo '<h4>🔄 Qué va a pasar:</h4>';
                echo '<ul>';
                echo '<li>Se creará una tabla <code>admin_users</code> en la base de datos</li>';
                echo '<li>Se migrará tu contraseña actual de administrador</li>';
                echo '<li>El sistema de login será actualizado automáticamente</li>';
                echo '<li>Podrás gestionar múltiples administradores</li>';
                echo '</ul>';
                
                echo '<h4>⚡ Información actual:</h4>';
                echo '<div class="code-block">';
                echo 'Base de datos: ' . DB_NAME . '<br>';
                echo 'Usuario BD: ' . DB_USER . '<br>';
                echo 'Contraseña admin actual: ' . (defined('ADMIN_PASSWORD') ? 'Configurada' : 'NO CONFIGURADA') . '<br>';
                echo '</div>';
                
                echo '<p><a href="?migrate=1" class="btn">🚀 Iniciar Migración</a></p>';
                echo '</div>';
            }
            
        } catch (Exception $e) {
            echo '<div class="error-box">';
            echo '<h3>❌ Error de Conexión</h3>';
            echo '<p>No se pudo conectar a la base de datos:</p>';
            echo '<div class="code-block">' . $e->getMessage() . '</div>';
            echo '<p>Verifica tu configuración en <code>config/config.php</code></p>';
            echo '</div>';
        }
        ?>
        
        <div class="warning-box" style="margin-top: 40px;">
            <h4>⚠️ Notas Importantes:</h4>
            <ul>
                <li>Esta migración es <strong>automática y segura</strong></li>
                <li>Tu contraseña actual se mantendrá igual</li>
                <li>El usuario por defecto será <code>admin</code></li>
                <li>Después de la migración, elimina este archivo por seguridad</li>
                <li>Se mantiene retrocompatibilidad durante la transición</li>
            </ul>
        </div>
    </div>
</body>
</html>