<?php
/**
 * Script para crear el primer usuario administrador
 * Ejecutar una sola vez: php create_admin.php
 */

// Cargar variables de entorno
if (file_exists(__DIR__ . '/.env')) {
    $lines = file(__DIR__ . '/.env', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    foreach ($lines as $line) {
        if (strpos(trim($line), '#') === 0) continue;
        if (strpos($line, '=') === false) continue;
        list($key, $value) = explode('=', $line, 2);
        $_ENV[trim($key)] = trim($value);
    }
}

require_once __DIR__ . '/shared/database/connection.php';

echo "========================================\n";
echo "  CREAR USUARIO ADMINISTRADOR\n";
echo "========================================\n\n";

try {
    $db = getDB();
    
    // Solicitar datos del usuario
    echo "Ingrese el nombre de usuario: ";
    $username = trim(fgets(STDIN));
    
    echo "Ingrese el email: ";
    $email = trim(fgets(STDIN));
    
    echo "Ingrese la contraseña: ";
    $password = trim(fgets(STDIN));
    
    echo "Ingrese el nombre completo: ";
    $nombreCompleto = trim(fgets(STDIN));
    
    if (empty($username) || empty($email) || empty($password)) {
        die("❌ Error: Todos los campos son obligatorios\n");
    }
    
    // Verificar si el usuario ya existe
    $stmt = $db->prepare("SELECT id FROM usuarios WHERE username = ? OR email = ?");
    $stmt->execute([$username, $email]);
    if ($stmt->fetch()) {
        die("❌ Error: Ya existe un usuario con ese nombre de usuario o email\n");
    }
    
    // Obtener el rol de Admin
    $stmt = $db->query("SELECT id FROM roles WHERE nombre = 'Admin' LIMIT 1");
    $rol = $stmt->fetch();
    
    if (!$rol) {
        die("❌ Error: No se encontró el rol de Admin. Ejecute primero el schema.sql\n");
    }
    
    $rolId = $rol['id'];
    
    // Obtener el idioma español por defecto
    $stmt = $db->query("SELECT id FROM idiomas WHERE codigo = 'es' LIMIT 1");
    $idioma = $stmt->fetch();
    $idiomaId = $idioma ? $idioma['id'] : 1;
    
    // Hash de la contraseña
    $passwordHash = password_hash($password, PASSWORD_DEFAULT);
    
    // Insertar usuario
    $stmt = $db->prepare("
        INSERT INTO usuarios (username, email, password, nombre_completo, rol_id, idioma_id, activo)
        VALUES (?, ?, ?, ?, ?, ?, 1)
    ");
    
    $stmt->execute([
        $username,
        $email,
        $passwordHash,
        $nombreCompleto,
        $rolId,
        $idiomaId
    ]);
    
    $userId = $db->lastInsertId();
    
    // Asignar todos los permisos al admin
    $stmt = $db->query("SELECT id FROM permisos");
    $permisos = $stmt->fetchAll(PDO::FETCH_COLUMN);
    
    $stmtPermiso = $db->prepare("INSERT INTO usuarios_permisos (usuario_id, permiso_id) VALUES (?, ?)");
    foreach ($permisos as $permisoId) {
        $stmtPermiso->execute([$userId, $permisoId]);
    }
    
    echo "\n========================================\n";
    echo "✅ Usuario administrador creado exitosamente\n";
    echo "========================================\n\n";
    echo "Usuario: $username\n";
    echo "Email: $email\n";
    echo "Rol: Admin\n";
    echo "ID: $userId\n";
    echo "\nYa puede iniciar sesión en el sistema.\n\n";
    
} catch (PDOException $e) {
    echo "❌ Error de base de datos: " . $e->getMessage() . "\n";
    exit(1);
} catch (Exception $e) {
    echo "❌ Error: " . $e->getMessage() . "\n";
    exit(1);
}
