<?php
declare(strict_types=1);

require_once __DIR__ . '/_bootstrap.php';
require_once __DIR__ . '/../config/push.php';
admin_require_login();

$destinos = [
    'todos' => 'Todos',
    'motoristas' => 'Motoristas',
    'passageiros' => 'Passageiros',
];
$admin = admin_current_user();

if (($_SERVER['REQUEST_METHOD'] ?? 'GET') === 'POST') {
    $destino = (string) ($_POST['destino'] ?? 'todos');
    $titulo = trim((string) ($_POST['titulo'] ?? ''));
    $mensagem = trim((string) ($_POST['mensagem'] ?? ''));

    if (!array_key_exists($destino, $destinos)) {
        admin_flash('Destino inválido.', 'error');
    } elseif ($titulo === '' || $mensagem === '') {
        admin_flash('Informe titulo e recado do aviso.', 'error');
    } else {
        try {
            $stmt = db()->prepare(
                'INSERT INTO avisos (destino, titulo, mensagem, enviado_por)
                 VALUES (?, ?, ?, ?)'
            );
            $stmt->execute([$destino, $titulo, $mensagem, $admin]);
            $idAviso = (int) db()->lastInsertId();
            $push = push_enviar_aviso_para_destino($destino, $titulo, $mensagem, $idAviso);

            if (!$push['configurado']) {
                admin_flash('Aviso armazenado. Push real ainda depende das credenciais do Firebase.');
            } elseif ((int) $push['tokens'] === 0) {
                admin_flash('Aviso armazenado. Nenhum aparelho registrado para receber push ainda.');
            } else {
                admin_flash(
                    'Aviso armazenado. Push enviado para ' . $push['enviados'] .
                    ' aparelho(s); falhas: ' . $push['falhas'] . '.'
                );
            }
        } catch (Throwable $e) {
            admin_flash('Erro ao enviar aviso: ' . $e->getMessage(), 'error');
        }
    }

    header('Location: avisos.php');
    exit;
}

$destinoFiltro = (string) ($_GET['destino'] ?? '');
if (!array_key_exists($destinoFiltro, $destinos)) {
    $destinoFiltro = '';
}
$q = trim((string) ($_GET['q'] ?? ''));
$avisos = admin_avisos_listar($destinoFiltro, $q);
$resumo = admin_avisos_resumo();
$flash = admin_flash();
?>
<!doctype html>
<html lang="pt-BR">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Bulo Admin - Avisos</title>
  <link rel="stylesheet" href="assets/admin.css?v=20260626-1">
</head>
<body>
  <?php admin_sidebar('avisos'); ?>

  <main class="page">
    <?php if ($flash): ?><div class="flash <?= e($flash['type']) ?>"><?= e($flash['message']) ?></div><?php endif; ?>

    <section class="panel">
      <div class="panel-header">
        <h1>Avisos</h1>
        <p>Envie comunicados para motoristas, passageiros ou toda a base. Os avisos ficam salvos no app.</p>
      </div>
      <div class="panel-body">
        <form class="notice-form" method="post" action="avisos.php">
          <div class="field">
            <label for="destino">Enviar para</label>
            <select id="destino" name="destino" required>
              <?php foreach ($destinos as $key => $label): ?>
                <option value="<?= e($key) ?>"><?= e($label) ?></option>
              <?php endforeach; ?>
            </select>
          </div>
          <div class="field">
            <label for="titulo">Titulo da notificação</label>
            <input id="titulo" name="titulo" maxlength="140" required placeholder="Ex.: Manutencao programada">
          </div>
          <div class="field notice-message">
            <label for="mensagem">Recado</label>
            <textarea id="mensagem" name="mensagem" rows="5" required placeholder="Escreva o aviso que aparecera no app..."></textarea>
          </div>
          <div class="actions">
            <button class="button" type="submit">Enviar aviso</button>
          </div>
        </form>
      </div>
    </section>

    <section class="metric-grid">
      <div class="stat-card stat-blue"><div><strong><?= e((string) $resumo['todos']) ?></strong><span>Todos</span><small>Avisos enviados para toda a base</small></div></div>
      <div class="stat-card stat-green"><div><strong><?= e((string) $resumo['motoristas']) ?></strong><span>Motoristas</span><small>Avisos enviados para motoristas</small></div></div>
      <div class="stat-card stat-orange"><div><strong><?= e((string) $resumo['passageiros']) ?></strong><span>Passageiros</span><small>Avisos enviados para passageiros</small></div></div>
      <div class="stat-card stat-gold"><div><strong><?= e((string) $resumo['total']) ?></strong><span>Total</span><small>Histórico completo de avisos</small></div></div>
    </section>

    <section class="panel">
      <div class="panel-header">
        <h1>Histórico</h1>
        <p><?= e((string) count($avisos)) ?> avisos encontrados.</p>
      </div>
      <div class="panel-body">
        <form class="support-filters" method="get" action="avisos.php">
          <div class="field">
            <label for="filtro_destino">Destino</label>
            <select id="filtro_destino" name="destino">
              <option value="">Todos</option>
              <?php foreach ($destinos as $key => $label): ?>
                <option value="<?= e($key) ?>" <?= $destinoFiltro === $key ? 'selected' : '' ?>><?= e($label) ?></option>
              <?php endforeach; ?>
            </select>
          </div>
          <div class="field">
            <label for="q">Busca</label>
            <input id="q" name="q" value="<?= e($q) ?>" placeholder="Titulo, recado ou admin">
          </div>
          <button class="button" type="submit">Filtrar</button>
        </form>

        <div class="notice-list">
          <?php foreach ($avisos as $aviso): ?>
            <article class="notice-card">
              <div>
                <div class="notice-card-head">
                  <span class="badge badge-info"><?= e($destinos[$aviso['destino']] ?? (string) $aviso['destino']) ?></span>
                  <span class="notice-date"><?= e((string) $aviso['criado_em']) ?></span>
                </div>
                <h2><?= e((string) $aviso['titulo']) ?></h2>
                <p><?= nl2br(e((string) $aviso['mensagem'])) ?></p>
              </div>
              <aside>
                <span>Enviado por</span>
                <strong><?= e((string) $aviso['enviado_por']) ?></strong>
              </aside>
            </article>
          <?php endforeach; ?>
          <?php if (!$avisos): ?><div class="empty-state">Nenhum aviso encontrado.</div><?php endif; ?>
        </div>
      </div>
    </section>
  </main>
</body>
</html>
<?php
function admin_avisos_resumo(): array
{
    $rows = db()->query('SELECT destino, COUNT(*) AS total FROM avisos GROUP BY destino')->fetchAll();
    $resumo = ['todos' => 0, 'motoristas' => 0, 'passageiros' => 0, 'total' => 0];
    foreach ($rows as $row) {
        $destino = (string) $row['destino'];
        $total = (int) $row['total'];
        if (isset($resumo[$destino])) {
            $resumo[$destino] = $total;
        }
        $resumo['total'] += $total;
    }

    return $resumo;
}

function admin_avisos_listar(string $destino, string $q): array
{
    $params = [];
    $where = ' WHERE 1=1';
    if ($destino !== '') {
        $where .= ' AND destino = ?';
        $params[] = $destino;
    }
    if ($q !== '') {
        $like = '%' . $q . '%';
        $where .= ' AND (titulo LIKE ? OR mensagem LIKE ? OR enviado_por LIKE ?)';
        array_push($params, $like, $like, $like);
    }

    $stmt = db()->prepare(
        'SELECT id, destino, titulo, mensagem, enviado_por, criado_em
         FROM avisos' . $where . '
         ORDER BY criado_em DESC, id DESC
         LIMIT 200'
    );
    $stmt->execute($params);

    return $stmt->fetchAll();
}
