<?php
declare(strict_types=1);

require_once __DIR__ . '/auth.php';
require_once __DIR__ . '/conexao.php';
require_once __DIR__ . '/solicitacao_publica_helpers.php';

date_default_timezone_set('America/Sao_Paulo');
$mysqli->set_charset('utf8mb4');

$usuario = strtolower(trim((string) ($_SESSION['usuario'] ?? '')));

if ($usuario !== 'renan') {
    http_response_code(403);
    exit('Somente Renan pode executar este instalador.');
}

$csrf = spCsrfTecnico();
$erro = '';
$mensagens = [];

function adicionarColuna(
    mysqli $mysqli,
    string $tabela,
    string $coluna,
    string $definicao
): void {
    if (spColunaExiste($mysqli, $tabela, $coluna)) {
        return;
    }

    if (!$mysqli->query(
        "ALTER TABLE `{$tabela}` ADD COLUMN `{$coluna}` {$definicao}"
    )) {
        throw new RuntimeException(
            "Não foi possível adicionar {$tabela}.{$coluna}: " .
            $mysqli->error
        );
    }
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    try {
        spValidarCsrfTecnico();

        $sql = file_get_contents(__DIR__ . '/SQL_SOLICITACAO_PUBLICA.sql');

        if ($sql === false || trim($sql) === '') {
            throw new RuntimeException(
                'SQL_SOLICITACAO_PUBLICA.sql não foi encontrado.'
            );
        }

        if (!$mysqli->query($sql)) {
            throw new RuntimeException(
                'Não foi possível criar a tabela: ' . $mysqli->error
            );
        }

        adicionarColuna(
            $mysqli,
            'ordens_servico',
            'email',
            "VARCHAR(180) NULL AFTER `setor`"
        );

        adicionarColuna(
            $mysqli,
            'ordens_servico',
            'vnc',
            "VARCHAR(120) NULL AFTER `telefone`"
        );

        adicionarColuna(
            $mysqli,
            'ordens_servico',
            'origem_publica_id',
            "BIGINT UNSIGNED NULL AFTER `mensagem_publica`"
        );

        adicionarColuna(
            $mysqli,
            'ordens_servico',
            'data_solicitacao_publica',
            "DATETIME NULL AFTER `origem_publica_id`"
        );

        if (!spTabelaExiste($mysqli, 'os_atualizacoes_publicas')) {
            $mysqli->query("
                CREATE TABLE os_atualizacoes_publicas (
                    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                    os_id INT NOT NULL,
                    titulo VARCHAR(150) NOT NULL,
                    mensagem VARCHAR(500) NULL,
                    status_publico VARCHAR(60) NOT NULL,
                    criado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
                    publicado_por VARCHAR(150) NULL,
                    visivel TINYINT(1) NOT NULL DEFAULT 1,
                    INDEX idx_atualizacao_os (os_id)
                ) ENGINE=InnoDB
                  DEFAULT CHARSET=utf8mb4
                  COLLATE=utf8mb4_unicode_ci
            ");
        }

        $pasta = __DIR__ . '/uploads/solicitacoes_publicas';

        if (
            !is_dir($pasta) &&
            !mkdir($pasta, 0775, true) &&
            !is_dir($pasta)
        ) {
            throw new RuntimeException(
                'Não foi possível criar uploads/solicitacoes_publicas.'
            );
        }

        $mensagens = [
            'Tabela de solicitações públicas criada ou confirmada.',
            'Colunas de e-mail, VNC e origem pública confirmadas na OS.',
            'Pasta segura de anexos preparada.',
            'A fila técnica está pronta para uso.'
        ];
    } catch (Throwable $e) {
        $erro = $e->getMessage();
    }
}
?>
<!doctype html><html lang="pt-BR"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Instalar Solicitação Pública</title>
<style>body{margin:0;min-height:100vh;display:grid;place-items:center;padding:20px;font-family:Arial,sans-serif;color:#172438;background:#edf3f8}.box{width:min(760px,100%);overflow:hidden;border-radius:26px;background:#fff;box-shadow:0 30px 90px rgba(8,57,111,.18)}.head{padding:24px;color:#fff;background:linear-gradient(145deg,#05294f,#08396f)}.body{padding:24px}.ok,.err,.warn{margin-bottom:10px;padding:12px;border-radius:13px}.ok{color:#076448;background:#e8f8f1}.err{color:#922138;background:#fff0f3}.warn{color:#805400;background:#fff7e6}button,a{min-height:44px;display:inline-flex;align-items:center;justify-content:center;padding:0 15px;border:0;border-radius:13px;color:#fff;background:#08396f;text-decoration:none;font-weight:bold;cursor:pointer}</style></head>
<body><main class="box"><header class="head"><h1>Solicitação Pública de OS</h1><p>Pré-cadastro sem contagem de prazo até a confirmação do técnico.</p></header><section class="body">
<?php if($erro):?><div class="err"><?=spE($erro)?></div><?php endif;?>
<?php foreach($mensagens as $m):?><div class="ok"><?=spE($m)?></div><?php endforeach;?>
<?php if(!$mensagens):?><div class="warn">Faça backup do banco e execute uma única vez.</div><form method="post"><input type="hidden" name="csrf_token" value="<?=spE($csrf)?>"><button>INSTALAR MÓDULO</button></form>
<?php else:?><a href="solicitacoes_publicas.php">Abrir fila técnica</a> <a href="solicitar_os.php" target="_blank">Abrir página pública</a><p style="color:#bf263d;font-weight:bold">Apague instalar_solicitacao_publica.php do servidor.</p><?php endif;?>
</section></main></body></html>
