<?php

/**
 * Script de un solo uso para crear el primer usuario admin en hosting sin
 * acceso SSH/CLI (no se puede generar un password_hash() bcrypt desde
 * phpMyAdmin). Protegido por SETUP_SECRET en .env.
 *
 * Uso: https://tu-dominio/.../setup-admin.php?secret=XXX&nombre=Admin&email=admin@tu-dominio.com&password=algo-seguro
 *
 * BORRAR ESTE ARCHIVO DEL SERVIDOR EN CUANTO TERMINES DE USARLO.
 */

declare(strict_types=1);

require __DIR__ . '/../vendor/autoload.php';

use Dotenv\Dotenv;

$dotenv = Dotenv::createImmutable(__DIR__ . '/..');
$dotenv->safeLoad();

header('Content-Type: text/plain; charset=utf-8');

$setupSecret = $_ENV['SETUP_SECRET'] ?? '';
$secretRecibido = $_GET['secret'] ?? '';

if (empty($setupSecret)) {
    http_response_code(500);
    echo "SETUP_SECRET no está configurado en .env. Agrega una línea como:\n";
    echo "SETUP_SECRET=una-clave-larga-aleatoria-que-solo-tu-conozcas\n";
    exit;
}

if (!hash_equals($setupSecret, (string) $secretRecibido)) {
    http_response_code(403);
    echo "Secret inválido.";
    exit;
}

$nombre = trim((string) ($_GET['nombre'] ?? ''));
$email = trim((string) ($_GET['email'] ?? ''));
$password = (string) ($_GET['password'] ?? '');

if ($nombre === '' || $email === '' || $password === '') {
    http_response_code(422);
    echo "Faltan parámetros. Uso:\n";
    echo "?secret=XXX&nombre=Admin&email=admin@tu-dominio.com&password=algo-seguro\n";
    exit;
}

if (strlen($password) < 8) {
    http_response_code(422);
    echo "La contraseña debe tener al menos 8 caracteres.";
    exit;
}

try {
    $db = App\Config\Database::connection();

    $stmt = $db->prepare('SELECT id FROM usuarios WHERE email = :email');
    $stmt->execute(['email' => $email]);
    if ($stmt->fetch()) {
        http_response_code(409);
        echo "Ya existe un usuario con ese email.";
        exit;
    }

    $stmt = $db->prepare(
        'INSERT INTO usuarios (nombre, email, password_hash, rol, activo, created_at)
         VALUES (:nombre, :email, :password_hash, "admin", 1, NOW())'
    );
    $stmt->execute([
        'nombre' => $nombre,
        'email' => $email,
        'password_hash' => password_hash($password, PASSWORD_DEFAULT),
    ]);

    echo "Usuario admin creado correctamente (id=" . $db->lastInsertId() . ").\n";
    echo "Ya puedes iniciar sesión en /panel/login.html con ese email y contraseña.\n\n";
    echo "IMPORTANTE: borra este archivo (setup-admin.php) del servidor ahora mismo.\n";
} catch (Throwable $e) {
    http_response_code(500);
    echo "Error: " . $e->getMessage();
}
