<?php
/**
 * Script para actualizar los roles en la base de datos
 * Cambia 'ship_admin' a 'sub-adm' para los admins asignados a buques
 * 
 * IMPORTANTE: Ejecutar este script una sola vez después de actualizar el código
 * Luego eliminar este archivo por seguridad
 */

require_once 'config.php';
require_once 'auth.php';

// Solo permitir ejecución si es admin
checkLogin();
if (($_SESSION['role'] ?? '') !== 'admin') {
    die('Solo el administrador puede ejecutar este script');
}

try {
    $pdo = getDBConnection();
    if (!$pdo) {
        die('Error de conexión a la base de datos');
    }

    // Contar usuarios con el rol antiguo
    $stmt = $pdo->query("SELECT COUNT(*) as count FROM users WHERE role = 'ship_admin'");
    $countOld = $stmt->fetch(PDO::FETCH_ASSOC)['count'];
    
    // Contar usuarios con rol vacío o NULL
    $stmt = $pdo->query("SELECT COUNT(*) as count FROM users WHERE (role IS NULL OR role = '') AND username != 'admin'");
    $countEmpty = $stmt->fetch(PDO::FETCH_ASSOC)['count'];
    
    echo "<h2>Actualización de Roles</h2>";
    echo "<p>Usuarios con rol 'ship_admin' encontrados: <strong>$countOld</strong></p>";
    echo "<p>Usuarios con rol vacío encontrados: <strong>$countEmpty</strong></p>";
    
    $totalUpdated = 0;
    
    if ($countOld > 0) {
        // Actualizar roles antiguos
        $stmt = $pdo->prepare("UPDATE users SET role = 'sub-adm' WHERE role = 'ship_admin'");
        $stmt->execute();
        $updated = $stmt->rowCount();
        $totalUpdated += $updated;
        echo "<p style='color: green;'>✓ Se actualizaron <strong>$updated</strong> usuarios de 'ship_admin' a 'sub-adm'</p>";
    }
    
    if ($countEmpty > 0) {
        // Actualizar usuarios con rol vacío: si tienen ship_id asignado, son sub-adm, si no, son user
        $stmt = $pdo->prepare("UPDATE users SET role = CASE WHEN ship_id IS NOT NULL AND ship_id != '' THEN 'sub-adm' ELSE 'user' END WHERE (role IS NULL OR role = '') AND username != 'admin'");
        $stmt->execute();
        $updated = $stmt->rowCount();
        $totalUpdated += $updated;
        echo "<p style='color: green;'>✓ Se actualizaron <strong>$updated</strong> usuarios con rol vacío</p>";
    }
    
    if ($totalUpdated > 0) {
        // Verificar usuarios con sub-adm
        $stmt = $pdo->query("SELECT id, username, role, ship_id FROM users WHERE role = 'sub-adm'");
        $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        if (count($users) > 0) {
            echo "<h3>Usuarios con rol 'sub-adm':</h3>";
            echo "<table border='1' cellpadding='5' style='border-collapse: collapse;'>";
            echo "<tr><th>ID</th><th>Usuario</th><th>Rol</th><th>Buque ID</th></tr>";
            foreach ($users as $user) {
                echo "<tr>";
                echo "<td>{$user['id']}</td>";
                echo "<td>{$user['username']}</td>";
                echo "<td>{$user['role']}</td>";
                echo "<td>" . ($user['ship_id'] ?? 'N/A') . "</td>";
                echo "</tr>";
            }
            echo "</table>";
        }
    } else {
        echo "<p style='color: blue;'>No hay usuarios con roles antiguos o vacíos. Todo está actualizado.</p>";
    }
    
    // Mostrar resumen de todos los roles
    echo "<h3>Resumen de roles en la base de datos:</h3>";
    $stmt = $pdo->query("SELECT role, COUNT(*) as count FROM users GROUP BY role");
    $roles = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo "<table border='1' cellpadding='5' style='border-collapse: collapse;'>";
    echo "<tr><th>Rol</th><th>Cantidad</th></tr>";
    foreach ($roles as $role) {
        echo "<tr>";
        echo "<td>{$role['role']}</td>";
        echo "<td>{$role['count']}</td>";
        echo "</tr>";
    }
    echo "</table>";
    
    echo "<br><p style='color: red;'><strong>IMPORTANTE:</strong> Elimina este archivo (update_roles.php) después de ejecutarlo por seguridad.</p>";
    
} catch (Exception $e) {
    echo "<p style='color: red;'>Error: " . htmlspecialchars($e->getMessage()) . "</p>";
}
?>

