<?php
declare(strict_types=1);

/** Partes de HTML comuns às duas áreas (aliados e administração). */

/** Endereço de um arquivo da pasta assets, com a data no fim para o navegador não usar versão velha. */
function asset(string $arquivo): string
{
    $p = Config::raiz() . '/public/assets/' . $arquivo;
    return 'assets/' . $arquivo . (is_file($p) ? '?v=' . filemtime($p) : '');
}

function pagina_inicio(string $titulo, string $lingua, string $classeBody = ''): void
{
    echo '<!doctype html>', "\n", '<html lang="', h($lingua), '"><head><meta charset="utf-8">',
        '<meta name="viewport" content="width=device-width, initial-scale=1">',
        '<meta name="robots" content="noindex, nofollow">',
        '<title>', h($titulo), '</title>',
        '<link rel="icon" href="', h(asset('icone.svg')), '" type="image/svg+xml">',
        '<link rel="stylesheet" href="', h(asset('estilo.css')), '">',
        '</head><body class="', h($classeBody), '">', "\n";
}

/** @param list<string> $scripts arquivos da pasta assets */
function pagina_fim(array $scripts = []): void
{
    foreach ($scripts as $s) {
        echo '<script src="', h(asset($s)), '" defer></script>';
    }
    echo "\n</body></html>\n";
}

/** Página de erro quando a instalação deixou arquivos privados na pasta pública. */
function pagina_instalacao_exposta(string $lingua): never
{
    http_response_code(503);
    pagina_inicio($lingua === 'es' ? 'Sitio en mantenimiento' : 'Instalação incorreta', $lingua, 'pagina-login');
    echo '<main class="caixa-login"><div class="cartao">';
    if ($lingua === 'es') {
        echo '<h1>Sitio en mantenimiento</h1><p>El sitio no está disponible en este momento. Intente más tarde.</p>';
    } else {
        echo '<h1>Instalação incorreta</h1>',
            '<p>A pasta do sistema (<code>app/</code>) ou a pasta de dados está dentro da pasta pública do site, ',
            'e qualquer pessoa poderia baixar os arquivos. Por segurança, o site não funciona assim.</p>',
            '<p>O <code>DocumentRoot</code> do Apache deve apontar para a pasta <code>public/</code> do projeto. ',
            'Veja o passo 3 do <code>INSTALACAO.md</code>.</p>';
    }
    echo '</div></main>';
    pagina_fim();
    exit;
}

/** Caixa de avisos (os que vieram da ação anterior). */
function mostra_avisos(array $avisos): void
{
    foreach ($avisos as $a) {
        $classe = match ($a['tipo']) {
            'ok' => 'aviso aviso-ok',
            'erro' => 'aviso aviso-erro',
            default => 'aviso',
        };
        echo '<div class="', $classe, '" role="status">', h($a['texto']), '</div>';
    }
}
