<?php
declare(strict_types=1);

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

$pdo = db();

if (($_SERVER['REQUEST_METHOD'] ?? 'GET') === 'POST') {
    $id = (int) ($_POST['id_passageiro'] ?? 0);
    $acao = (string) ($_POST['acao'] ?? '');
    $observacao = trim((string) ($_POST['observacao'] ?? ''));
    $admin = admin_current_user();

    if ($id <= 0 || !in_array($acao, ['aprovar', 'reprovar'], true)) {
        admin_flash('Solicitacao invalida.', 'error');
        header('Location: passageiros_documentos.php');
        exit;
    }

    try {
        $stmt = $pdo->prepare(
            'SELECT passageiro_documento_url, passageiro_documento_selfie_url
             FROM usuarios
             WHERE id = ? AND tipo = "passageiro"
             LIMIT 1'
        );
        $stmt->execute([$id]);
        $passageiro = $stmt->fetch();
        if (!$passageiro) {
            throw new RuntimeException('Passageiro não encontrado.');
        }

        if ($acao === 'aprovar' && (empty($passageiro['passageiro_documento_url']) || empty($passageiro['passageiro_documento_selfie_url']))) {
            throw new RuntimeException('Para aprovar, o passageiro precisa ter enviado documento e selfie.');
        }

        $status = $acao === 'aprovar' ? 'aprovado' : 'reprovado';
        $up = $pdo->prepare(
            'UPDATE usuarios
             SET passageiro_documento_status = ?,
                 passageiro_documento_observacao = ?,
                 passageiro_documento_aprovado_por = ?,
                 passageiro_documento_aprovado_em = NOW()
             WHERE id = ? AND tipo = "passageiro"'
        );
        $up->execute([$status, $observacao === '' ? null : $observacao, $admin, $id]);

        admin_flash($status === 'aprovado' ? 'Passageiro verificado.' : 'Documento reprovado.');
    } catch (Throwable $e) {
        admin_flash('Erro ao revisar documento: ' . $e->getMessage(), 'error');
    }

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

$statusFiltro = trim((string) ($_GET['status'] ?? 'pendente'));
$permitidos = ['todos', 'nao_enviado', 'pendente', 'aprovado', 'reprovado'];
if (!in_array($statusFiltro, $permitidos, true)) {
    $statusFiltro = 'pendente';
}

$q = trim((string) ($_GET['q'] ?? ''));
$rows = admin_passageiros_documentos($statusFiltro, $q);
$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 - Documentos passageiros</title>
  <link rel="stylesheet" href="assets/admin.css?v=20260626-1">
</head>
<body>
  <?php admin_sidebar('passageiros_documentos'); ?>

  <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>Documentos de passageiros</h1>
        <p>Revise documento e selfie para liberar o selo de passageiro verificado.</p>
      </div>
      <div class="panel-body">
        <form class="support-filters" method="get" action="passageiros_documentos.php">
          <div class="field">
            <label for="status">Status</label>
            <select id="status" name="status">
              <?php foreach (['todos' => 'Todos', 'nao_enviado' => 'Não enviados', 'pendente' => 'Pendentes', 'aprovado' => 'Aprovados', 'reprovado' => 'Reprovados'] as $valor => $label): ?>
                <option value="<?= e($valor) ?>" <?= $statusFiltro === $valor ? '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="Nome, e-mail, CPF ou celular">
          </div>
          <button class="button" type="submit">Filtrar</button>
        </form>
      </div>
    </section>

    <section class="panel">
      <div class="panel-header">
        <h1>Passageiros</h1>
        <p><?= e((string) count($rows)) ?> encontrado(s).</p>
      </div>
      <div class="panel-body table-wrap">
        <table>
          <thead>
            <tr>
              <th>Passageiro</th>
              <th>Status</th>
              <th>Arquivos</th>
              <th>Observação</th>
              <th>Ações</th>
            </tr>
          </thead>
          <tbody>
            <?php foreach ($rows as $r): ?>
              <tr>
                <td>
                  <strong><?= e((string) $r['nome']) ?></strong><br>
                  <?= e((string) $r['email']) ?><br>
                  <small><?= e((string) $r['celular']) ?> | CPF: <?= e((string) $r['cpf']) ?></small>
                </td>
                <td>
                  <span class="badge <?= e(admin_status_class((string) $r['passageiro_documento_status'])) ?>">
                    <?= e(admin_passageiro_doc_status_label((string) $r['passageiro_documento_status'])) ?>
                  </span><br>
                  <small><?= e((string) ($r['passageiro_documento_aprovado_por'] ?: '--')) ?> <?= e((string) ($r['passageiro_documento_aprovado_em'] ?: '')) ?></small>
                </td>
                <td>
                  <?php if (!empty($r['passageiro_documento_url'])): ?>
                    <a class="button secondary" target="_blank" href="../<?= e((string) $r['passageiro_documento_url']) ?>">Documento</a>
                  <?php else: ?>
                    <span class="badge badge-muted">Documento ausente</span>
                  <?php endif; ?>
                  <?php if (!empty($r['passageiro_documento_selfie_url'])): ?>
                    <a class="button secondary" target="_blank" href="../<?= e((string) $r['passageiro_documento_selfie_url']) ?>">Selfie</a>
                  <?php else: ?>
                    <span class="badge badge-muted">Selfie ausente</span>
                  <?php endif; ?>
                </td>
                <td><?= e((string) ($r['passageiro_documento_observacao'] ?? '--')) ?></td>
                <td>
                  <form method="post" action="passageiros_documentos.php" style="display:grid; gap:8px; min-width:220px;">
                    <input type="hidden" name="id_passageiro" value="<?= e((string) $r['id']) ?>">
                    <input type="text" name="observacao" placeholder="Observação opcional">
                    <div class="actions">
                      <button class="button success" type="submit" name="acao" value="aprovar">Aprovar</button>
                      <button class="button danger" type="submit" name="acao" value="reprovar">Reprovar</button>
                    </div>
                  </form>
                  <a class="button secondary" href="visualizar_passageiro.php?id=<?= e((string) $r['id']) ?>">Visualizar</a>
                </td>
              </tr>
            <?php endforeach; ?>
            <?php if (!$rows): ?><tr><td colspan="5">Nenhum passageiro encontrado.</td></tr><?php endif; ?>
          </tbody>
        </table>
      </div>
    </section>
  </main>
</body>
</html>
<?php
function admin_passageiro_doc_status_label(string $status): string
{
    return [
        'nao_enviado' => 'Não enviado',
        'pendente' => 'Pendente',
        'aprovado' => 'Aprovado',
        'reprovado' => 'Reprovado',
    ][$status] ?? $status;
}

function admin_passageiros_documentos(string $status, string $q): array
{
    $params = [];
    $where = ' WHERE tipo = "passageiro"';
    if ($status !== 'todos') {
        $where .= ' AND passageiro_documento_status = ?';
        $params[] = $status;
    }

    if ($q !== '') {
        $like = '%' . $q . '%';
        $where .= ' AND (nome LIKE ? OR email LIKE ? OR cpf LIKE ? OR celular LIKE ?)';
        array_push($params, $like, $like, $like, $like);
    }

    $stmt = db()->prepare(
        'SELECT id, nome, email, celular, cpf, passageiro_documento_url,
                passageiro_documento_selfie_url, passageiro_documento_status,
                passageiro_documento_observacao, passageiro_documento_aprovado_por,
                passageiro_documento_aprovado_em, atualizado_em
         FROM usuarios' . $where . '
         ORDER BY FIELD(passageiro_documento_status, "pendente", "reprovado", "aprovado", "nao_enviado"), atualizado_em DESC
         LIMIT 300'
    );
    $stmt->execute($params);

    return $stmt->fetchAll();
}
