<?php
declare(strict_types=1);
require __DIR__ . '/db.php';
hogar_session_start();

if (!function_exists('imagecreatetruecolor')) {
    http_response_code(500);
    header('Content-Type: text/plain');
    die('La extensión GD de PHP no está habilitada en el servidor. Actívala en HestiaCP (PHP-FPM > extensiones) para poder usar el captcha.');
}

// Genera un código alfanumérico simple, fácil de leer, sin caracteres ambiguos (0/O, 1/l/I).
$chars = 'ABCDEFGHJKMNPQRSTUVWXYZ23456789';
$code = '';
for ($i = 0; $i < 5; $i++) {
    $code .= $chars[random_int(0, strlen($chars) - 1)];
}
$_SESSION['captcha_code'] = $code;
$_SESSION['captcha_expires'] = time() + 300; // 5 minutos

$width = 150; $height = 50;
$img = imagecreatetruecolor($width, $height);

$bg = imagecolorallocate($img, 247, 243, 234);   // var(--ivory)
$fg = imagecolorallocate($img, 46, 38, 32);      // var(--walnut)
$accent = imagecolorallocate($img, 174, 90, 59); // var(--brick)
imagefilledrectangle($img, 0, 0, $width, $height, $bg);

// Ruido: líneas y puntos para dificultar el reconocimiento automático.
for ($i = 0; $i < 6; $i++) {
    $lineColor = imagecolorallocate($img, random_int(180, 220), random_int(180, 220), random_int(180, 220));
    imageline($img, random_int(0, $width), random_int(0, $height), random_int(0, $width), random_int(0, $height), $lineColor);
}
for ($i = 0; $i < 80; $i++) {
    $dotColor = imagecolorallocate($img, random_int(190, 230), random_int(190, 230), random_int(190, 230));
    imagesetpixel($img, random_int(0, $width - 1), random_int(0, $height - 1), $dotColor);
}

// Dibuja cada letra con rotación e color ligeramente distintos.
$fontSize = 5;
$x = 15;
for ($i = 0; $i < strlen($code); $i++) {
    $color = ($i % 2 === 0) ? $fg : $accent;
    $y = random_int(12, 20);
    imagestring($img, $fontSize, $x, $y, $code[$i], $color);
    $x += 20;
}

header('Content-Type: image/png');
header('Cache-Control: no-store, no-cache, must-revalidate');
imagepng($img);
imagedestroy($img);
