<?php
/**
 * Gera capas padrão bonitas por console usando GD com fonte built-in escalada.
 * Uso: php admin/gera_capas.php
 */

function hex2rgb($hex) {
    $hex = ltrim($hex, '#');
    return [hexdec(substr($hex,0,2)), hexdec(substr($hex,2,2)), hexdec(substr($hex,4,2))];
}

function escreverTextoGrande($img, $texto, $fonteTamanhos = [5], $cor) {
    // Simula fonte grande duplicando pixels via imagenscala
    $tmp = imagecreatetruecolor(10, 10);
    $bg = imagecolorallocatealpha($tmp, 0,0,0,127);
    imagefill($tmp, 0, 0, $bg);
    $preto = imagecolorallocate($tmp, 255,255,255);
    // mede com font 5
    $f = 5;
    $cx = imagefontwidth($f) * strlen($texto);
    $cy = imagefontheight($f);
    $tmp = imagecreatetruecolor($cx + 10, $cy + 10);
    imagesavealpha($tmp, true);
    imagealphablending($tmp, false);
    $bg = imagecolorallocatealpha($tmp, 0,0,0,127);
    imagefill($tmp, 0, 0, $bg);
    imagealphablending($tmp, true);
    $preto = imagecolorallocate($tmp, 255,255,255);
    imagestring($tmp, $f, 5, 5, $texto, $preto);
    $scale = 4;
    $grande = imagescale($tmp, $cx * $scale, $cy * $scale);
    imagecolortransparent($grande, imagecolorat($grande, 0, 0));
    imagesavealpha($grande, true);
    $x = (imagesx($img) - imagesx($grande)) / 2;
    imagecopy($img, $grande, $x, $y ?? 0, 0, 0, imagesx($grande), imagesy($grande));
}

function gerarCapa($arquivo, $cor1, $cor2, $nomeConsole) {
    $w = 400; $h = 560;
    $img = imagecreatetruecolor($w, $h);
    imagesavealpha($img, false);

    $c1 = hex2rgb($cor1);
    $c2 = hex2rgb($cor2);
    for ($y = 0; $y < $h; $y++) {
        $t = $y / $h;
        $r = round($c1[0] + ($c2[0] - $c1[0]) * $t);
        $g = round($c1[1] + ($c2[1] - $c1[1]) * $t);
        $b = round($c1[2] + ($c2[2] - $c1[2]) * $t);
        $cor = imagecolorallocate($img, $r, $g, $b);
        imageline($img, 0, $y, $w, $y, $cor);
        imagecolordeallocate($img, $cor);
    }

    // Faixa superior
    $faixa = imagecolorallocate($img, 0, 0, 0);
    imagefilledrectangle($img, 0, 0, $w, 70, $faixa);

    // Texto grande no centro
    $branco = imagecolorallocate($img, 255, 255, 255);
    escreverTextoGrande($img, $nomeConsole, 5, $branco);
    // Recentralizar verticalmente (~centro abaixo da faixa)
    // (texto fica em y=0 no helper; redesenhamos em canvas novo)
    // Refazer: criar texto isolado e colar
    imagesetclip($img, 0, 0, $w, $h);

    // Rodapé
    $rodape = imagecolorallocate($img, 255, 255, 255);
    imagefilledrectangle($img, 0, $h - 60, $w, $h, $rodape);
    $azul = imagecolorallocate($img, 0x1a, 0x3a, 0x5c);
    imagestring($img, 5, $w/2 - 60, $h - 40, 'JOGOS RETRO', $azul);

    imagepng($img, $arquivo);
    imagedestroy($img);
    echo "Gerado: $arquivo\n";
}

// Melhor abordagem: texto grande via escala (refaz com y controlado)
function gerarCapaV2($arquivo, $cor1, $cor2, $nomeConsole) {
    $w = 400; $h = 560;
    $img = imagecreatetruecolor($w, $h);

    $c1 = hex2rgb($cor1);
    $c2 = hex2rgb($cor2);
    for ($y = 0; $y < $h; $y++) {
        $t = $y / $h;
        $r = round($c1[0] + ($c2[0] - $c1[0]) * $t);
        $g = round($c1[1] + ($c2[1] - $c1[1]) * $t);
        $b = round($c1[2] + ($c2[2] - $c1[2]) * $t);
        $cor = imagecolorallocate($img, $r, $g, $b);
        imageline($img, 0, $y, $w, $y, $cor);
        imagecolordeallocate($img, $cor);
    }

    $f = 5;
    $cx = imagefontwidth($f) * strlen($nomeConsole);
    $cy = imagefontheight($f);
    $larguraMax = (int)($w * 0.78);
    $escala = (int)max(1, floor($larguraMax / $cx));

    $tmp = imagecreatetruecolor($cx + 10, $cy + 10);
    imagesavealpha($tmp, true);
    imagealphablending($tmp, false);
    $transparente = imagecolorallocatealpha($tmp, 0,0,0,127);
    imagefill($tmp, 0, 0, $transparente);
    imagealphablending($tmp, true);
    $branco = imagecolorallocate($tmp, 255,255,255);
    imagestring($tmp, $f, 5, 5, $nomeConsole, $branco);

    $grande = imagescale($tmp, $cx * $escala, $cy * $escala);
    imagecolortransparent($grande, imagecolorat($grande, 0, 0));
    imagesavealpha($grande, true);

    $tx = (int)(($w - imagesx($grande)) / 2);
    $ty = (int)(($h - 120 - imagesy($grande)) / 2);
    imagecopy($img, $grande, $tx, $ty, 0, 0, imagesx($grande), imagesy($grande));
    imagedestroy($tmp);
    imagedestroy($grande);

    // Moldura
    $branco2 = imagecolorallocate($img, 255, 255, 255);
    imagerectangle($img, 10, 10, $w - 11, $h - 11, $branco2);

    imagepng($img, $arquivo);
    imagedestroy($img);
    echo "Gerado: $arquivo\n";
}

$dir = __DIR__ . '/capas';
if (!is_dir($dir)) mkdir($dir, 0777, true);

gerarCapaV2("$dir/nes.png", '1a3a5c', 'b0c4de', 'NES');
gerarCapaV2("$dir/snes.png", '4a0080', '9b59b6', 'SNES');
gerarCapaV2("$dir/mega.png", '0a0a2a', '3a5a8c', 'MEGA DRIVE');
gerarCapaV2("$dir/mastersystem.png", '1a5c2e', '7bc47b', 'MASTER SYSTEM');
gerarCapaV2("$dir/arcade.png", '8b0000', 'e85050', 'ARCADE');
