<?php
declare(strict_types=1);
$overrideFile = __DIR__ . '/api/config.override.php';
$lockFile = __DIR__ . '/storage/install.lock';
$done = is_file($lockFile) || is_file($overrideFile);
$message = '';
$error = '';
$scheme = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || strtolower((string)($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '')) === 'https') ? 'https' : 'http';
$host = trim((string)($_SERVER['HTTP_HOST'] ?? ''));
$basePath = rtrim(str_replace('\\', '/', dirname((string)($_SERVER['SCRIPT_NAME'] ?? '/instalar.php'))), '/.');
$detectedUrl = $host !== '' ? $scheme . '://' . $host . ($basePath !== '' ? $basePath : '') : '';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$done) {
    $user = trim((string)($_POST['username'] ?? ''));
    $pass = (string)($_POST['password'] ?? '');
    $confirm = (string)($_POST['confirm'] ?? '');
    $domain = trim((string)($_POST['public_base_url'] ?? ''));
    $mailEnabled = !empty($_POST['mail_enabled']);
    $mailFrom = trim((string)($_POST['mail_from'] ?? ''));
    $mailName = trim((string)($_POST['mail_from_name'] ?? 'UEN Alberto Smith · SIAPA'));
    if (!preg_match('/^[A-Za-z0-9_.-]{4,50}$/', $user)) $error = 'El usuario debe tener entre 4 y 50 caracteres válidos.';
    elseif (strlen($pass) < 12) $error = 'La contraseña debe tener al menos 12 caracteres.';
    elseif (!hash_equals($pass, $confirm)) $error = 'La confirmación de contraseña no coincide.';
    elseif ($domain !== '' && !filter_var($domain, FILTER_VALIDATE_URL)) $error = 'La URL pública no es válida.';
    elseif ($mailEnabled && !filter_var($mailFrom, FILTER_VALIDATE_EMAIL)) $error = 'Indique un correo remitente válido o desactive el correo.';
    else {
        $cfg = [
            'username' => $user,
            'password_hash' => password_hash($pass, PASSWORD_DEFAULT),
            'public_base_url' => rtrim($domain, '/'),
            'mail_enabled' => $mailEnabled,
            'mail_from' => $mailFrom,
            'mail_from_name' => $mailName,
            'mail_reply_to' => $mailFrom,
            'peer_token' => bin2hex(random_bytes(32)),
        ];
        $php = "<?php\ndeclare(strict_types=1);\nreturn " . var_export($cfg, true) . ";\n";
        if (!is_dir(__DIR__ . '/storage')) @mkdir(__DIR__ . '/storage', 0770, true);
        if (@file_put_contents($overrideFile, $php, LOCK_EX) === false) $error = 'No se pudo escribir api/config.override.php. Conceda permiso de escritura temporal a la carpeta api.';
        elseif (@file_put_contents($lockFile, gmdate('c') . "\n", LOCK_EX) === false) $error = 'La configuración se creó, pero no se pudo generar storage/install.lock. Créelo manualmente para bloquear el instalador.';
        else { $done = true; $message = 'Instalación completada. El instalador quedó bloqueado.'; }
    }
}
?><!doctype html><html lang="es"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Instalación SIAPA V41</title><style>body{margin:0;background:#17050b;color:#f8eef1;font-family:Arial,sans-serif}.box{max-width:760px;margin:40px auto;padding:28px;background:#310b16;border:1px solid #7a3348;border-radius:20px;box-shadow:0 25px 70px #0008}h1{margin:0 0 8px}p{color:#d7c2c9;line-height:1.5}.grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.full{grid-column:1/-1}label{display:block;font-size:11px;font-weight:800;text-transform:uppercase;margin-bottom:5px;color:#efc98c}input{width:100%;box-sizing:border-box;padding:11px;border-radius:10px;border:1px solid #77505d;background:#16070c;color:#fff}.check{display:flex;align-items:center;gap:8px}.check input{width:auto}.btn{width:100%;padding:13px;border:0;border-radius:11px;background:#8f1d39;color:#fff;font-weight:900;text-transform:uppercase;cursor:pointer}.ok,.err,.note{padding:12px;border-radius:11px;margin:14px 0}.ok{background:#064e3b}.err{background:#7f1d1d}.note{background:#3f2d0c;color:#fde7b1}@media(max-width:650px){.grid{grid-template-columns:1fr}.full{grid-column:auto}}</style></head><body><main class="box"><h1>SIAPA V41 · Instalación del dominio</h1><p>Esta pantalla configura las credenciales privadas de sincronización y, opcionalmente, el correo institucional. La ruta de la API ya está precargada como <b>./api</b>.</p><?php if($message):?><div class="ok"><?=htmlspecialchars($message)?></div><?php endif;?><?php if($error):?><div class="err"><?=htmlspecialchars($error)?></div><?php endif;?><?php if($done):?><div class="note"><b>El sistema ya está configurado.</b><br>Abra <a href="./index.html" style="color:#fff">SIAPA</a>. Para cambiar estos datos, edite de forma privada <code>api/config.override.php</code>; no elimine el bloqueo sin autorización.</div><?php else:?><form method="post" autocomplete="off"><div class="grid"><div><label>Usuario del servidor</label><input name="username" value="<?=htmlspecialchars((string)($_POST['username'] ?? 'siapaadmin'))?>" required></div><div><label>URL pública del dominio</label><input name="public_base_url" value="<?=htmlspecialchars((string)($_POST['public_base_url'] ?? $detectedUrl))?>" placeholder="https://tu-dominio.edu"></div><div><label>Contraseña segura</label><input name="password" type="password" minlength="12" required></div><div><label>Confirmar contraseña</label><input name="confirm" type="password" minlength="12" required></div><div class="full check"><input id="mail_enabled" name="mail_enabled" type="checkbox" value="1"><label for="mail_enabled" style="margin:0">Activar envío de correo mediante PHP mail()</label></div><div><label>Correo remitente</label><input name="mail_from" type="email" placeholder="siapa@tu-dominio.edu"></div><div><label>Nombre remitente</label><input name="mail_from_name" value="UEN Alberto Smith · SIAPA"></div><div class="full"><button class="btn" type="submit">Configurar y bloquear instalador</button></div></div></form><div class="note">Después de instalar, use este mismo usuario y contraseña en el botón <b>Servidor</b> de SIAPA. El hosting debe usar PHP 8.1 o superior, HTTPS y permisos de escritura en <code>storage/</code>.</div><?php endif;?></main></body></html>
