<?php
// ── Segurança: somente localhost ─────────────────────────────────────────────
if (!in_array($_SERVER['REMOTE_ADDR'] ?? '', ['127.0.0.1', '::1', '::ffff:127.0.0.1'])) {
    http_response_code(403); exit('Acesso negado');
}

$root   = dirname(__DIR__);          // C:\Program Files\Premium Express Gestão
$log    = [];
$ok     = 0;
$erros  = 0;

function escrever(string $caminho, string $conteudo, array &$log, int &$ok, int &$erros): void
{
    $dir = dirname($caminho);
    if (!is_dir($dir)) mkdir($dir, 0777, true);
    if (file_put_contents($caminho, $conteudo) !== false) {
        $log[] = ['ok', $caminho];
        $ok++;
    } else {
        $log[] = ['err', $caminho];
        $erros++;
    }
}

// ════════════════════════════════════════════════════════════════════════════
// 1. MesasRepository.php — fix LANC_MESA + itensMesasAbertas()
// ════════════════════════════════════════════════════════════════════════════
$mesasRepo = <<<'PHP'
<?php

namespace App\Repositories;

class MesasRepository
{
    public function __construct(private \PDO $pdo) {}

    // Faturamento real = soma das formas de pagamento (TOTAL_ITENS é NULL neste banco)
    private const FAT = "(COALESCE(am.TOTAL_AVISTA,0)+COALESCE(am.TOTA_APRAZO,0)+COALESCE(am.TOTAL_CHEQUE,0)+COALESCE(am.TOTAL_CARTAO,0))";
    private const FAT_PLAIN = "(COALESCE(TOTAL_AVISTA,0)+COALESCE(TOTA_APRAZO,0)+COALESCE(TOTAL_CHEQUE,0)+COALESCE(TOTAL_CARTAO,0))";

    public function kpis(string $dataIni, string $dataFim): array
    {
        $fat = self::FAT_PLAIN;
        $sql = "SELECT
            COUNT(*) QTD_TOTAL,
            COUNT(CASE WHEN STATUS = 'F' THEN 1 END) QTD_FECHADAS,
            COUNT(CASE WHEN STATUS = 'C' THEN 1 END) QTD_CANCELADAS,
            SUM(CASE WHEN STATUS = 'F' THEN {$fat} ELSE 0 END) FATURAMENTO,
            SUM(CASE WHEN STATUS = 'F' THEN COALESCE(TX_SERVICO,0) ELSE 0 END) TX_SERVICO_TOTAL,
            AVG(CASE WHEN STATUS = 'F' THEN {$fat} END) TICKET_MEDIO,
            COUNT(DISTINCT COD_MESA) MESAS_UTILIZADAS
        FROM ABERT_MESA
        WHERE DATA_ABERTURA BETWEEN ? AND ?";
        $st = $this->pdo->prepare($sql);
        $st->execute([$dataIni, $dataFim]);
        return $st->fetch(\PDO::FETCH_ASSOC) ?: [];
    }

    public function monitor(): array
    {
        // Consumo em tempo real: soma dos lançamentos em LANC_MESA (mesas ainda abertas)
        $sql = "SELECT
            am.COD_ABERTURA, am.COD_MESA, am.STATUS,
            am.DATA_ABERTURA, am.HORA_ABERTURA,
            am.QTD_PESSOAS, am.TX_SERVICO,
            COALESCE(cons.TOTAL_ITENS, 0) TOTAL_ITENS,
            p.NOME GARCOM
        FROM ABERT_MESA am
        LEFT JOIN GARCOM g ON am.COD_GARCOM = g.COD_GARCOM
        LEFT JOIN PESSOAS p ON g.COD_PESSOA = p.COD_PESSOA
        LEFT JOIN (
            SELECT lm.COD_ABERTURA,
                   SUM(lm.QTD * lm.PRECO_UNIT) - SUM(COALESCE(lm.DESCONTO_VLR, 0)) AS TOTAL_ITENS
            FROM LANC_MESA lm
            GROUP BY lm.COD_ABERTURA
        ) cons ON cons.COD_ABERTURA = am.COD_ABERTURA
        WHERE am.STATUS = 'A'
        ORDER BY am.DATA_ABERTURA DESC, am.HORA_ABERTURA DESC";
        return $this->pdo->query($sql)->fetchAll(\PDO::FETCH_ASSOC);
    }

    public function itensMesasAbertas(): array
    {
        $sql = "SELECT
            lm.COD_ABERTURA,
            lm.COD_PRODUTO,
            lm.DESCRICAO,
            lm.QTD,
            lm.PRECO_UNIT,
            lm.QTD * lm.PRECO_UNIT - COALESCE(lm.DESCONTO_VLR, 0) SUBTOTAL,
            lm.DATAHORAMOV,
            lm.OBSERVACAO
        FROM LANC_MESA lm
        JOIN ABERT_MESA am ON am.COD_ABERTURA = lm.COD_ABERTURA
        WHERE am.STATUS = 'A'
        ORDER BY lm.COD_ABERTURA, lm.DATAHORAMOV";
        $rows = $this->pdo->query($sql)->fetchAll(\PDO::FETCH_ASSOC);

        // Agrupa por COD_ABERTURA
        $agrupado = [];
        foreach ($rows as $r) {
            $agrupado[$r['COD_ABERTURA']][] = $r;
        }
        return $agrupado;
    }

    public function historico(string $dataIni, string $dataFim, int $limite = 200): array
    {
        $fat = self::FAT;
        $sql = "SELECT FIRST {$limite}
            am.COD_ABERTURA, am.COD_MESA, am.STATUS,
            am.DATA_ABERTURA, am.HORA_ABERTURA,
            am.DATA_FECHAMENTO, am.HORA_FECHAMENTO,
            {$fat} TOTAL_ITENS,
            am.QTD_PESSOAS, am.TX_SERVICO, am.DESCONTO,
            p.NOME GARCOM
        FROM ABERT_MESA am
        LEFT JOIN GARCOM g ON am.COD_GARCOM = g.COD_GARCOM
        LEFT JOIN PESSOAS p ON g.COD_PESSOA = p.COD_PESSOA
        WHERE am.DATA_ABERTURA BETWEEN ? AND ?
          AND am.STATUS IN ('F','C')
        ORDER BY am.DATA_ABERTURA DESC, am.HORA_ABERTURA DESC";
        $st = $this->pdo->prepare($sql);
        $st->execute([$dataIni, $dataFim]);
        return $st->fetchAll(\PDO::FETCH_ASSOC);
    }

    public function porGarcom(string $dataIni, string $dataFim): array
    {
        $fat = self::FAT;
        $sql = "SELECT
            COALESCE(p.NOME, 'Sem Garçom') GARCOM,
            COUNT(*) QTD_MESAS,
            SUM(CASE WHEN am.STATUS='F' THEN {$fat} ELSE 0 END) FATURAMENTO,
            AVG(CASE WHEN am.STATUS='F' THEN {$fat} END) TICKET_MEDIO,
            SUM(CASE WHEN am.STATUS='F' THEN COALESCE(am.TX_SERVICO,0) ELSE 0 END) TX_SERVICO,
            SUM(CASE WHEN am.STATUS='F' THEN COALESCE(am.QTD_PESSOAS,0) ELSE 0 END) QTD_PESSOAS
        FROM ABERT_MESA am
        LEFT JOIN GARCOM g ON am.COD_GARCOM = g.COD_GARCOM
        LEFT JOIN PESSOAS p ON g.COD_PESSOA = p.COD_PESSOA
        WHERE am.DATA_ABERTURA BETWEEN ? AND ?
          AND am.STATUS IN ('F','C')
        GROUP BY p.NOME
        ORDER BY FATURAMENTO DESC";
        $st = $this->pdo->prepare($sql);
        $st->execute([$dataIni, $dataFim]);
        return $st->fetchAll(\PDO::FETCH_ASSOC);
    }

    public function tempoMedio(string $dataIni, string $dataFim): array
    {
        $fat = self::FAT;
        $sql = "SELECT FIRST 300
            am.COD_MESA,
            am.DATA_ABERTURA,
            am.HORA_ABERTURA,
            am.HORA_FECHAMENTO,
            {$fat} TOTAL_ITENS,
            am.QTD_PESSOAS,
            p.NOME GARCOM
        FROM ABERT_MESA am
        LEFT JOIN GARCOM g ON am.COD_GARCOM = g.COD_GARCOM
        LEFT JOIN PESSOAS p ON g.COD_PESSOA = p.COD_PESSOA
        WHERE am.DATA_ABERTURA BETWEEN ? AND ?
          AND am.STATUS = 'F'
          AND am.HORA_ABERTURA IS NOT NULL
          AND am.HORA_FECHAMENTO IS NOT NULL
        ORDER BY am.DATA_ABERTURA DESC";
        $st = $this->pdo->prepare($sql);
        $st->execute([$dataIni, $dataFim]);
        return $st->fetchAll(\PDO::FETCH_ASSOC);
    }

    public function faturamentoPorDia(string $dataIni, string $dataFim): array
    {
        $fat = self::FAT_PLAIN;
        $sql = "SELECT
            DATA_ABERTURA DATA,
            COUNT(*) QTD_MESAS,
            SUM({$fat}) FATURAMENTO,
            AVG({$fat}) TICKET_MEDIO
        FROM ABERT_MESA
        WHERE DATA_ABERTURA BETWEEN ? AND ? AND STATUS = 'F'
        GROUP BY DATA_ABERTURA
        ORDER BY DATA_ABERTURA";
        $st = $this->pdo->prepare($sql);
        $st->execute([$dataIni, $dataFim]);
        return $st->fetchAll(\PDO::FETCH_ASSOC);
    }

    public function comissoesPorGarcom(string $dataIni, string $dataFim, float $perc = 10.0): array
    {
        $fat = self::FAT;
        $sql = "SELECT
            COALESCE(p.NOME, 'Sem Garçom') GARCOM,
            COUNT(*) QTD_MESAS,
            SUM(CASE WHEN am.STATUS='F' THEN {$fat} ELSE 0 END) FATURAMENTO,
            SUM(CASE WHEN am.STATUS='F' THEN COALESCE(am.TX_SERVICO,0) ELSE 0 END) TX_SERVICO,
            SUM(CASE WHEN am.STATUS='F' THEN {$fat} ELSE 0 END) * ? / 100.0 COMISSAO
        FROM ABERT_MESA am
        LEFT JOIN GARCOM g ON am.COD_GARCOM = g.COD_GARCOM
        LEFT JOIN PESSOAS p ON g.COD_PESSOA = p.COD_PESSOA
        WHERE am.DATA_ABERTURA BETWEEN ? AND ?
          AND am.STATUS IN ('F','C')
        GROUP BY p.NOME
        ORDER BY FATURAMENTO DESC";
        $st = $this->pdo->prepare($sql);
        $st->execute([$perc, $dataIni, $dataFim]);
        return $st->fetchAll(\PDO::FETCH_ASSOC);
    }

    public function comissoesMensal(string $dataIni, string $dataFim, float $perc = 10.0): array
    {
        $fat = self::FAT_PLAIN;
        $sql = "SELECT
            EXTRACT(YEAR FROM DATA_ABERTURA) ANO,
            EXTRACT(MONTH FROM DATA_ABERTURA) MES,
            SUM({$fat}) FATURAMENTO,
            SUM({$fat}) * ? / 100.0 COMISSAO
        FROM ABERT_MESA
        WHERE DATA_ABERTURA BETWEEN ? AND ? AND STATUS = 'F'
        GROUP BY EXTRACT(YEAR FROM DATA_ABERTURA), EXTRACT(MONTH FROM DATA_ABERTURA)
        ORDER BY ANO, MES";
        $st = $this->pdo->prepare($sql);
        $st->execute([$perc, $dataIni, $dataFim]);
        return $st->fetchAll(\PDO::FETCH_ASSOC);
    }

    public function ultimaData(): string
    {
        try {
            $r = $this->pdo->query("SELECT MAX(DATA_ABERTURA) D FROM ABERT_MESA WHERE STATUS = 'F'")->fetchColumn();
            if (!$r) return date('Y-m-d');
            if ($r instanceof \DateTime) return $r->format('Y-m-d');
            return substr((string)$r, 0, 10);
        } catch (\Throwable) { return date('Y-m-d'); }
    }
}
PHP;

escrever($root . '/app/Repositories/MesasRepository.php', $mesasRepo, $log, $ok, $erros);

// ════════════════════════════════════════════════════════════════════════════
// 2. MesasController.php — chama itensMesasAbertas() e passa $itens
// ════════════════════════════════════════════════════════════════════════════
$mesasCtrl = <<<'PHP'
<?php

namespace App\Controllers;

use App\Core\Database;
use App\Core\View;
use App\Repositories\MesasRepository;

class MesasController
{
    private function repo(): MesasRepository
    {
        return new MesasRepository(Database::conectar());
    }

    private function config(): array
    {
        $path = dirname(__DIR__, 2) . '/config/database.php';
        return file_exists($path) ? (require $path) : [];
    }

    private function guardaConexao(): void
    {
        if (!Database::estaConfigurado()) { header('Location: /configurar'); exit; }
    }

    private function tentar(callable $fn, mixed $padrao, array &$erros): mixed
    {
        try { return $fn(); } catch (\Throwable $e) { $erros[] = $e->getMessage(); return $padrao; }
    }

    private function filtros(MesasRepository $repo): array
    {
        $ultima  = $repo->ultimaData();
        $dataIni = $_GET['data_ini'] ?? date('Y-m-d', strtotime($ultima . ' -29 days'));
        $dataFim = $_GET['data_fim'] ?? $ultima;
        if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $dataIni)) $dataIni = date('Y-m-d', strtotime($ultima . ' -29 days'));
        if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $dataFim))  $dataFim = $ultima;
        if ($dataFim < $dataIni) $dataFim = $dataIni;
        return compact('dataIni', 'dataFim', 'ultima');
    }

    public function monitor(): void
    {
        $this->guardaConexao();
        $config = $this->config();
        $status = Database::verificar();
        $erros  = [];
        $abertas = [];
        $kpis   = [];

        $itens = [];
        if ($status['success']) {
            $repo    = $this->repo();
            $ultima  = $repo->ultimaData();
            $abertas = $this->tentar(fn() => $repo->monitor(), [], $erros);
            $kpis    = $this->tentar(fn() => $repo->kpis($ultima, $ultima), [], $erros);
            $itens   = $this->tentar(fn() => $repo->itensMesasAbertas(), [], $erros);
        }

        View::render('mesas/monitor', [
            'titulo'  => 'Monitor de Mesas — Premium Express Gestão',
            'config'  => $config, 'conexao' => $status,
            'segmento'=> $config['segmento'] ?? '',
            'abertas' => $abertas, 'kpis' => $kpis,
            'itens'   => $itens,
            'erros'   => $erros, 'ano' => date('Y'),
        ]);
    }

    public function historico(): void
    {
        $this->guardaConexao();
        $config  = $this->config();
        $status  = Database::verificar();
        $erros   = [];
        $linhas  = [];
        $kpis    = [];
        $filtros = ['dataIni' => '', 'dataFim' => '', 'ultima' => ''];

        if ($status['success']) {
            $repo    = $this->repo();
            $filtros = $this->filtros($repo);
            $kpis    = $this->tentar(fn() => $repo->kpis($filtros['dataIni'], $filtros['dataFim']), [], $erros);
            $linhas  = $this->tentar(fn() => $repo->historico($filtros['dataIni'], $filtros['dataFim']), [], $erros);
        }

        View::render('mesas/historico', [
            'titulo'  => 'Histórico de Mesas — Premium Express Gestão',
            'config'  => $config, 'conexao' => $status,
            'segmento'=> $config['segmento'] ?? '',
            'filtros' => $filtros, 'kpis' => $kpis, 'linhas' => $linhas,
            'erros'   => $erros, 'ano' => date('Y'),
        ]);
    }

    public function porGarcom(): void
    {
        $this->guardaConexao();
        $config  = $this->config();
        $status  = Database::verificar();
        $erros   = [];
        $linhas  = [];
        $filtros = ['dataIni' => '', 'dataFim' => '', 'ultima' => ''];

        if ($status['success']) {
            $repo    = $this->repo();
            $filtros = $this->filtros($repo);
            if (!isset($_GET['data_ini'])) {
                $filtros['dataIni'] = date('Y-m-d', strtotime($filtros['ultima'] . ' -89 days'));
            }
            $linhas = $this->tentar(fn() => $repo->porGarcom($filtros['dataIni'], $filtros['dataFim']), [], $erros);
        }

        View::render('mesas/por-garcom', [
            'titulo'  => 'Mesas por Garçom — Premium Express Gestão',
            'config'  => $config, 'conexao' => $status,
            'segmento'=> $config['segmento'] ?? '',
            'filtros' => $filtros, 'linhas' => $linhas,
            'erros'   => $erros, 'ano' => date('Y'),
        ]);
    }

    public function tempoMedio(): void
    {
        $this->guardaConexao();
        $config  = $this->config();
        $status  = Database::verificar();
        $erros   = [];
        $linhas  = [];
        $filtros = ['dataIni' => '', 'dataFim' => '', 'ultima' => ''];

        if ($status['success']) {
            $repo    = $this->repo();
            $filtros = $this->filtros($repo);
            $raw     = $this->tentar(fn() => $repo->tempoMedio($filtros['dataIni'], $filtros['dataFim']), [], $erros);
            // Calcula tempo em minutos via PHP
            foreach ($raw as $r) {
                $ini = $r['HORA_ABERTURA'] ?? '00:00';
                $fim = $r['HORA_FECHAMENTO'] ?? '00:00';
                if (strlen($ini) >= 5 && strlen($fim) >= 5) {
                    [$hIni, $mIni] = explode(':', substr($ini, 0, 5));
                    [$hFim, $mFim] = explode(':', substr($fim, 0, 5));
                    $minutos = ((int)$hFim * 60 + (int)$mFim) - ((int)$hIni * 60 + (int)$mIni);
                    if ($minutos < 0) $minutos += 1440;
                    $r['MINUTOS'] = $minutos;
                } else {
                    $r['MINUTOS'] = 0;
                }
                $linhas[] = $r;
            }
        }

        $mediaMin = count($linhas) > 0 ? array_sum(array_column($linhas, 'MINUTOS')) / count($linhas) : 0;

        View::render('mesas/tempo-medio', [
            'titulo'   => 'Tempo Médio de Mesa — Premium Express Gestão',
            'config'   => $config, 'conexao' => $status,
            'segmento' => $config['segmento'] ?? '',
            'filtros'  => $filtros, 'linhas' => $linhas,
            'mediaMin' => round($mediaMin),
            'erros'    => $erros, 'ano' => date('Y'),
        ]);
    }
}
PHP;

escrever($root . '/app/Controllers/MesasController.php', $mesasCtrl, $log, $ok, $erros);

// ════════════════════════════════════════════════════════════════════════════
// 3. monitor.php — KPI cards + consumo real + itens colapsáveis
// ════════════════════════════════════════════════════════════════════════════
$monitorView = <<<'PHPV'
<?php
$fmt = fn($v,$d=2) => 'R$ ' . number_format((float)$v, $d, ',', '.');
?>
<div class="pbi-page-header">
    <h1 class="pbi-page-title"><i class="bi bi-display me-2 text-accent"></i>Mesas</h1>
</div>
<?php include __DIR__ . '/_submenu.php' ?>

<?php if(!$conexao['success']): ?>
<div class="alert alert-danger"><?= \App\Core\View::e($conexao['mensagem']) ?></div>
<?php else: ?>

<div class="pbi-kpi-grid mb-4">
    <div class="pbi-kpi-card">
        <div class="pbi-kpi-icon" style="background:rgba(245,158,11,0.12)"><i class="bi bi-grid-3x3-gap-fill text-warning"></i></div>
        <div class="pbi-kpi-body">
            <div class="pbi-kpi-label">Mesas Abertas</div>
            <div class="pbi-kpi-value text-warning"><?= count($abertas) ?></div>
            <div class="pbi-kpi-sub">em atendimento</div>
        </div>
    </div>
    <?php
    $totalConsumo = array_sum(array_column($abertas, 'TOTAL_ITENS'));
    ?>
    <div class="pbi-kpi-card">
        <div class="pbi-kpi-icon" style="background:rgba(79,142,247,0.12)"><i class="bi bi-cash-coin text-accent"></i></div>
        <div class="pbi-kpi-body">
            <div class="pbi-kpi-label">Consumo Total Aberto</div>
            <div class="pbi-kpi-value"><?= $fmt($totalConsumo) ?></div>
            <div class="pbi-kpi-sub">soma de todas as mesas</div>
        </div>
    </div>
</div>

<?php if($abertas): ?>
<div class="row g-3 mb-4">
<?php foreach($abertas as $m):
    $codAb    = $m['COD_ABERTURA'];
    $itensMesa = $itens[$codAb] ?? [];
?>
<div class="col-md-6 col-lg-4">
    <div class="pbi-card h-100" style="border:2px solid var(--pbi-accent)">
        <!-- Cabeçalho -->
        <div class="pbi-card-header d-flex justify-content-between align-items-center">
            <span class="fw-bold"><i class="bi bi-grid-3x3-gap-fill me-1"></i>Mesa <?= \App\Core\View::e($m['COD_MESA']??'—') ?></span>
            <span class="pbi-badge pbi-badge-warning">Aberta</span>
        </div>
        <!-- Resumo -->
        <div class="px-3 pt-3 pb-2">
            <div class="d-flex justify-content-between mb-1">
                <span class="text-muted small">Garçom</span>
                <span class="fw-semibold small"><?= \App\Core\View::e($m['GARCOM']??'—') ?></span>
            </div>
            <div class="d-flex justify-content-between mb-1">
                <span class="text-muted small">Abertura</span>
                <span class="small"><?= \App\Core\View::e(substr($m['HORA_ABERTURA']??'—',0,5)) ?></span>
            </div>
            <div class="d-flex justify-content-between mb-2">
                <span class="text-muted small">Pessoas</span>
                <span class="small"><?= (int)($m['QTD_PESSOAS']??0) ?></span>
            </div>
            <div class="d-flex justify-content-between align-items-center py-2" style="border-top:1px solid var(--pbi-border)">
                <span class="text-muted small fw-semibold">CONSUMO TOTAL</span>
                <span class="text-accent fw-bold fs-6"><?= $fmt($m['TOTAL_ITENS']??0) ?></span>
            </div>
        </div>
        <!-- Itens lançados -->
        <?php if($itensMesa): ?>
        <div style="border-top:1px solid var(--pbi-border)">
            <button class="btn btn-sm w-100 text-start px-3 py-2 d-flex justify-content-between align-items-center"
                    style="background:var(--pbi-surface-2);border:none;color:var(--pbi-sidebar-text)"
                    onclick="this.nextElementSibling.classList.toggle('d-none');this.querySelector('i').classList.toggle('bi-chevron-down');this.querySelector('i').classList.toggle('bi-chevron-up')">
                <span class="small fw-semibold"><i class="bi bi-list-ul me-1"></i><?= count($itensMesa) ?> item(ns) lançado(s)</span>
                <i class="bi bi-chevron-down small"></i>
            </button>
            <div class="d-none" style="max-height:220px;overflow-y:auto">
                <table class="table table-sm mb-0" style="font-size:.78rem">
                    <thead style="background:var(--pbi-surface-2)">
                        <tr>
                            <th class="px-3 text-muted fw-normal">Produto</th>
                            <th class="text-center text-muted fw-normal">Qtd</th>
                            <th class="text-end px-3 text-muted fw-normal">Total</th>
                        </tr>
                    </thead>
                    <tbody>
                    <?php foreach($itensMesa as $it): ?>
                        <tr>
                            <td class="px-3">
                                <?= \App\Core\View::e($it['DESCRICAO']??'—') ?>
                                <?php if(!empty($it['OBSERVACAO'])): ?>
                                <div class="text-muted" style="font-size:.72rem"><?= \App\Core\View::e($it['OBSERVACAO']) ?></div>
                                <?php endif; ?>
                            </td>
                            <td class="text-center"><?= number_format((float)($it['QTD']??0),0,'.','.') ?>×</td>
                            <td class="text-end px-3 fw-semibold"><?= $fmt($it['SUBTOTAL']??0) ?></td>
                        </tr>
                    <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
        </div>
        <?php else: ?>
        <div class="px-3 pb-3 text-muted small text-center">Nenhum item lançado</div>
        <?php endif; ?>
    </div>
</div>
<?php endforeach; ?>
</div>
<?php else: ?>
<div class="pbi-card">
    <div class="p-5 text-center">
        <i class="bi bi-grid-3x3-gap text-muted" style="font-size:3rem"></i>
        <p class="mt-3 text-muted">Nenhuma mesa aberta no momento.</p>
    </div>
</div>
<?php endif; ?>
<?php endif; ?>
PHPV;

escrever($root . '/app/Views/mesas/monitor.php', $monitorView, $log, $ok, $erros);

// ════════════════════════════════════════════════════════════════════════════
// Auto-delete este script após execução
// ════════════════════════════════════════════════════════════════════════════
@unlink(__FILE__);

// ════════════════════════════════════════════════════════════════════════════
// Resultado
// ════════════════════════════════════════════════════════════════════════════
header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Atualização — Premium Express Gestão</title>
<style>
body{font-family:'Segoe UI',sans-serif;background:#0f172a;color:#e2e8f0;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0}
.box{background:#1e293b;border-radius:12px;padding:2rem 2.5rem;max-width:560px;width:100%;box-shadow:0 8px 32px rgba(0,0,0,.4)}
h2{color:#4f8ef7;margin-bottom:1rem}
.ok{color:#22c55e}.err{color:#ef4444}
.item{padding:.3rem 0;border-bottom:1px solid #334155;font-size:.85rem;word-break:break-all}
.summary{margin-top:1rem;padding:.75rem;border-radius:8px;text-align:center;font-weight:600}
.sum-ok{background:rgba(34,197,94,.15);color:#22c55e}
.sum-err{background:rgba(239,68,68,.15);color:#ef4444}
a{color:#4f8ef7;display:inline-block;margin-top:1rem}
</style>
</head>
<body>
<div class="box">
<h2>⚡ Atualização Automática</h2>
<p style="color:#94a3b8;margin-bottom:1rem">Arquivos processados:</p>
<?php foreach($log as [$tipo, $caminho]): ?>
<div class="item <?= $tipo ?>">
    <?= $tipo === 'ok' ? '✅' : '❌' ?>
    <?= htmlspecialchars(str_replace($root, '', $caminho)) ?>
</div>
<?php endforeach; ?>
<div class="summary <?= $erros > 0 ? 'sum-err' : 'sum-ok' ?>">
    <?= $ok ?> arquivo(s) OK <?= $erros > 0 ? "· {$erros} erro(s)" : '' ?>
</div>
<?php if($erros === 0): ?>
<p style="color:#94a3b8;font-size:.85rem;margin-top:.75rem">✔ Script removido automaticamente por segurança.</p>
<?php endif; ?>
<a href="/mesas/monitor">→ Ir para Monitor de Mesas</a>
</div>
</body>
</html>
