<?php
declare(strict_types=1);

require_once 'auth.php';
require_once 'conexao.php';
require_once 'os_publico_helpers.php';

date_default_timezone_set('America/Sao_Paulo');

if ($mysqli instanceof mysqli) {
    $mysqli->set_charset('utf8mb4');
}

if (session_status() !== PHP_SESSION_ACTIVE) {
    session_start();
}

function e(mixed $valor): string
{
    return htmlspecialchars((string) $valor, ENT_QUOTES, 'UTF-8');
}

if (empty($_SESSION['csrf_backfill_acompanhamento'])) {
    $_SESSION['csrf_backfill_acompanhamento'] = bin2hex(random_bytes(24));
}

$csrf = (string) $_SESSION['csrf_backfill_acompanhamento'];
$mensagem = '';
$erro = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $recebido = (string) ($_POST['csrf_token'] ?? '');

    if ($recebido === '' || !hash_equals($csrf, $recebido)) {
        $erro = 'A sessão expirou. Atualize a página.';
    } else {
        try {
            $resultado = $mysqli->query("
                SELECT id, numero_os
                FROM ordens_servico
                WHERE token_acompanhamento IS NULL
                   OR token_acompanhamento = ''
                ORDER BY id
            ");

            if (!$resultado) {
                throw new RuntimeException('Não foi possível consultar as ordens antigas.');
            }

            $ordens = $resultado->fetch_all(MYSQLI_ASSOC);
            $resultado->free();
            $processadas = 0;

            foreach ($ordens as $ordem) {
                $osId = (int) $ordem['id'];
                osPublicoGarantirToken($mysqli, $osId);

                $stmt = $mysqli->prepare("
                    SELECT id
                    FROM os_atualizacoes_publicas
                    WHERE os_id = ?
                    LIMIT 1
                ");

                $temAtualizacao = false;

                if ($stmt) {
                    $stmt->bind_param('i', $osId);
                    $stmt->execute();
                    $temAtualizacao = (bool) $stmt->get_result()->fetch_assoc();
                    $stmt->close();
                }

                if (!$temAtualizacao) {
                    osPublicoRegistrarAtualizacao(
                        $mysqli,
                        $osId,
                        'Acompanhamento disponibilizado',
                        'Esta ordem de serviço foi integrada ao novo painel público de acompanhamento.',
                        'ATUALIZACAO',
                        (string) ($_SESSION['usuario'] ?? 'Sistema'),
                        1
                    );
                }

                $processadas++;
            }

            $_SESSION['csrf_backfill_acompanhamento'] = bin2hex(random_bytes(24));
            $csrf = (string) $_SESSION['csrf_backfill_acompanhamento'];
            $mensagem = $processadas > 0
                ? $processadas . ' ordem(ns) antiga(s) receberam link público.'
                : 'Todas as ordens já possuem link público.';
        } catch (Throwable $ex) {
            $erro = $ex->getMessage();
        }
    }
}

$semToken = 0;
$total = 0;

$resultado = $mysqli->query("
    SELECT
        COUNT(*) AS total,
        SUM(
            CASE
                WHEN token_acompanhamento IS NULL
                  OR token_acompanhamento = ''
                THEN 1 ELSE 0
            END
        ) AS sem_token
    FROM ordens_servico
");

if ($resultado) {
    $dados = $resultado->fetch_assoc() ?: [];
    $resultado->free();
    $total = (int) ($dados['total'] ?? 0);
    $semToken = (int) ($dados['sem_token'] ?? 0);
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Ativar acompanhamento antigo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
<style>
body{min-height:100vh;display:grid;place-items:center;margin:0;padding:20px;font-family:Inter,system-ui,sans-serif;background:radial-gradient(circle at 10% 10%,rgba(20,91,159,.15),transparent 28rem),#edf3f8;color:#152236}.card-box{width:min(720px,100%);padding:28px;border:1px solid #dce5ee;border-radius:28px;background:#fff;box-shadow:0 30px 80px rgba(8,57,111,.15)}.icon{width:62px;height:62px;display:grid;place-items:center;border-radius:20px;color:#fff;background:linear-gradient(145deg,#05294f,#08396f);font-size:27px}.kpis{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:20px 0}.kpi{padding:16px;border:1px solid #dce5ee;border-radius:18px;background:#f6f9fc}.kpi span{display:block;color:#617086;font-size:11px}.kpi strong{display:block;margin-top:5px;color:#08396f;font-size:31px}.btn-main{min-height:50px;border:0;border-radius:15px;color:#fff;background:linear-gradient(145deg,#066748,#087f5b);font-weight:800}.btn-back{min-height:50px;border:1px solid #dce5ee;border-radius:15px;color:#08396f;background:#fff;font-weight:800}
</style>
</head>
<body>
<main class="card-box">
<div class="d-flex align-items-center gap-3"><div class="icon"><i class="bi bi-broadcast-pin"></i></div><div><h1 class="h4 fw-bold mb-1">Ativar acompanhamento nas OS antigas</h1><p class="text-secondary mb-0 small">Gera tokens seguros para registros criados antes do novo painel.</p></div></div>
<?php if ($mensagem !== ''): ?><div class="alert alert-success mt-4 mb-0"><?= e($mensagem) ?></div><?php endif; ?>
<?php if ($erro !== ''): ?><div class="alert alert-danger mt-4 mb-0"><?= e($erro) ?></div><?php endif; ?>
<div class="kpis"><div class="kpi"><span>Total de ordens</span><strong><?= $total ?></strong></div><div class="kpi"><span>Sem link público</span><strong><?= $semToken ?></strong></div></div>
<div class="alert alert-info border-0 rounded-4 small">A operação não altera status, solução, técnico ou anexos. Apenas cria o token e uma atualização pública inicial.</div>
<div class="d-grid d-md-flex gap-2">
<a href="listar_os.php" class="btn-back flex-fill d-inline-flex align-items-center justify-content-center gap-2 text-decoration-none"><i class="bi bi-arrow-left"></i>Voltar</a>
<form method="POST" class="flex-fill"><input type="hidden" name="csrf_token" value="<?= e($csrf) ?>"><button type="submit" class="btn-main w-100"><i class="bi bi-shield-check me-2"></i>Processar OS antigas</button></form>
</div>
</main>
</body>
</html>
