<?php
/**
 * Ejecuta la migración del sistema de Roles y Módulos.
 * Acceder UNA sola vez desde el navegador (admin autenticado).
 * Eliminar o proteger este archivo después de ejecutar.
 */
require_once 'config/config.php';

if (!isUserLoggedIn()) {
    header('Location: login.php'); exit;
}

$sqlFile = __DIR__ . '/migrations/20260304_roles_and_modules.sql';
if (!file_exists($sqlFile)) {
    die('❌ Archivo de migración no encontrado: ' . $sqlFile);
}

$sql = file_get_contents($sqlFile);

// Eliminar comentarios de línea (-- ...) y comentarios de bloque (/* ... */)
$sql = preg_replace('/--[^\n]*/', '', $sql);
$sql = preg_replace('/\/\*.*?\*\//s', '', $sql);

// Dividir en sentencias individuales por el punto y coma
$statements = array_filter(
    array_map('trim', explode(';', $sql)),
    fn($s) => $s !== '' && $s !== "\n"
);

try {
    $pdo = createDbConnection();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $ok = 0; $errors = [];
    foreach ($statements as $stmt) {
        if (!trim($stmt)) continue;
        try {
            $pdo->exec($stmt);
            $ok++;
        } catch (PDOException $e) {
            // Ignorar: columna ya existe, índice ya existe, clave duplicada en INSERT
            $msg = $e->getMessage();
            if (
                str_contains($msg, 'Duplicate entry') ||
                str_contains($msg, 'Duplicate key') ||
                str_contains($msg, 'already exists') ||
                str_contains($msg, 'Duplicate column name') ||
                str_contains($msg, "Can't DROP") ||
                preg_match('/already exists/i', $msg)
            ) {
                $ok++;
            } else {
                $errors[] = '<strong>Error:</strong> ' . htmlspecialchars($msg) .
                            '<br><code>' . htmlspecialchars(substr($stmt, 0, 200)) . '</code>';
            }
        }
    }
    ?>
    <!DOCTYPE html><html lang="es"><head><meta charset="UTF-8">
    <title>Migración Roles</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    </head><body class="p-4">
    <div class="container" style="max-width:740px">
        <h3 class="mb-3">🔧 Migración: Roles y Módulos</h3>
        <div class="alert alert-<?= $errors ? 'warning' : 'success' ?>">
            ✅ <strong><?= $ok ?></strong> sentencias ejecutadas correctamente.<br>
            <?php if ($errors): ?>
            ⚠️ <strong><?= count($errors) ?></strong> advertencias (ver abajo).
            <?php endif; ?>
        </div>
        <?php foreach ($errors as $e): ?>
            <div class="alert alert-danger small"><?= $e ?></div>
        <?php endforeach; ?>
        <a href="lab_usuarios.php" class="btn btn-primary">Ir a Usuarios & Roles →</a>
        <a href="lab_dashboard.php" class="btn btn-outline-secondary ms-2">Dashboard</a>
        <p class="mt-3 text-muted small">⚠️ Elimina o protege este archivo (<code>run_roles_migration.php</code>) después de ejecutarlo.</p>
    </div></body></html>
    <?php
} catch (Exception $e) {
    echo '<div class="alert alert-danger p-3">❌ Error de conexión: ' . htmlspecialchars($e->getMessage()) . '</div>';
}
