<?php
// /arapiraca/admin_configuracoes.php
require_once __DIR__ . '/../src/db.php';
require_once __DIR__ . '/../src/helpers.php';

require_login();
if (($_SESSION['tipo'] ?? '') !== 'operador') {
  header('Location:/arapiraca/vereador.php');
  exit;
}

/* ========== Descobrir sessão ativa ========= */
$sessao_id = (int)($_GET['sessao_id'] ?? 0);

if ($sessao_id <= 0) {
  $sessao_id = (int)$pdo->query("
        SELECT id
          FROM sessoes
         WHERE status = 'ativa'
         ORDER BY data_sessao DESC, id DESC
         LIMIT 1
    ")->fetchColumn();
}

if ($sessao_id <= 0) {
  // pega a mais recente não encerrada
  $sessao_id = (int)$pdo->query("
        SELECT id
          FROM sessoes
         WHERE status <> 'encerrada'
         ORDER BY data_sessao DESC, id DESC
         LIMIT 1
    ")->fetchColumn();
}

/* URL do voltar para a tela de matérias da sessão */
$backUrl = '/arapiraca/admin_materia_nova.php';
if (!empty($sessao_id)) {
  $backUrl .= '?sessao=' . (int)$sessao_id;
}

/* ========== Matéria com votação aberta (se houver) ========= */
$sm    = null;
$sm_id = null;

if ($sessao_id > 0) {
  $q = $pdo->prepare("
        SELECT sm.id AS sm_id, m.titulo
          FROM sessao_materias sm
          JOIN materias m ON m.id = sm.materia_id
         WHERE sm.sessao_id = :s
           AND sm.status = 'votacao_aberta'
         ORDER BY sm.ordem ASC, sm.id ASC
         LIMIT 1
    ");
  $q->execute([':s' => $sessao_id]);
  $sm    = $q->fetch();
  $sm_id = $sm['sm_id'] ?? null;
}

/* ===========================================================
   MAPAS: PEDIDOS DE VOZ (pendentes e autorizadas)
   - pendentePorVereador[vid] = ['id'=>pedido_id,'min'=>tempo]
   - autorizadaPorVereador[vid] = pedido_id
   =========================================================== */
$pendentePorVereador = [];
$autorizadaPorVereador = [];

if ($sessao_id > 0) {

  // Pendentes (pega o mais antigo por vereador)
  $stP = $pdo->prepare("
    SELECT pf.id, pf.vereador_id, COALESCE(pf.tempo_solicitado, 5) AS tempo_solicitado
      FROM pedidos_fala pf
     WHERE pf.sessao_id = :s
       AND pf.status = 'pendente'
     ORDER BY pf.id ASC
  ");
  $stP->execute([':s' => $sessao_id]);
  foreach ($stP->fetchAll() as $row) {
    $vid = (int)$row['vereador_id'];
    if (!isset($pendentePorVereador[$vid])) {
      $pendentePorVereador[$vid] = [
        'id'  => (int)$row['id'],
        'min' => (int)$row['tempo_solicitado'],
      ];
    }
  }

  // Autorizadas (ativa)
  $stA = $pdo->prepare("
    SELECT pf.id, pf.vereador_id
      FROM pedidos_fala pf
     WHERE pf.sessao_id = :s
       AND pf.status = 'autorizada'
  ");
  $stA->execute([':s' => $sessao_id]);
  foreach ($stA->fetchAll() as $row) {
    $autorizadaPorVereador[(int)$row['vereador_id']] = (int)$row['id'];
  }
}

/* ========== Vereadores + presença + voto atual ========= */
$vereadores = [];
if ($sessao_id > 0) {
  $st = $pdo->prepare("
        SELECT
          u.id,
          u.nome,
          COALESCE(u.partido,'')      AS partido,
          COALESCE(u.foto,'')         AS foto,
          COALESCE(u.eh_presidente,0) AS eh_presidente,
          COALESCE(q.presente,0)      AS presente,
          v.voto
        FROM usuarios u
        LEFT JOIN quorum q
               ON q.vereador_id = u.id
              AND q.sessao_id   = :s
        LEFT JOIN votos v
               ON v.vereador_id       = u.id
              AND v.sessao_materia_id = :m
       WHERE u.tipo_usuario = 'vereador'
         AND u.ativo = 1
       ORDER BY eh_presidente DESC, u.nome ASC
    ");
  $st->execute([
    ':s' => $sessao_id,
    ':m' => $sm_id ?: 0,
  ]);
  $vereadores = $st->fetchAll();
}
?>
<!doctype html>
<html lang="pt-br">

<head>
  <meta charset="utf-8">
  <title>Configurações Rápidas — Operador</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <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.css" rel="stylesheet">
  <style>
    body {
      background: #f6f7fb;
    }

    .btn-pill {
      border-radius: 999px;
    }

    .v-card {
      display: flex;
      gap: .75rem;
      align-items: center;
      padding: .75rem;
      border: 1px solid #eee;
      border-radius: .75rem;
      background: #fff;
    }

    .v-card.presente {
      border-color: #cfe9cf;
      background: #f6fff6;
    }

    .v-card .foto {
      width: 42px;
      height: 42px;
      border-radius: 50%;
      object-fit: cover;
    }

    .btn-xs {
      padding: .15rem .45rem;
      font-size: .75rem;
    }

    .badge-voto {
      font-size: .7rem;
    }

    .topbar {
      background: #fff;
      border-radius: 14px;
      padding: .6rem .8rem;
      box-shadow: 0 2px 10px rgba(0, 0, 0, .04);
    }

    .btn-aparte-ativo {
      background-color: #0d6efd !important;
      color: #fff !important;
      border-color: #0d6efd !important;
    }
  </style>
</head>

<body>
  <div class="container py-4">

    <div class="d-flex align-items-center justify-content-between mb-3 topbar">
      <div class="d-flex align-items-center gap-2">
        <a class="btn btn-outline-secondary btn-pill d-inline-flex align-items-center gap-2"
          href="<?= htmlspecialchars($backUrl) ?>"
          onclick="if (this.getAttribute('href') === '/arapiraca/admin_materia_nova.php') { history.back(); return false; }">
          <i class="bi bi-arrow-left"></i><span>Voltar</span>
        </a>
        <h4 class="m-0 ms-2">Configurações Rápidas</h4>
      </div>

      <div class="d-flex align-items-center gap-2">
        <a class="btn btn-light btn-pill d-inline-flex align-items-center gap-2"
          href="/arapiraca/admin_materia_nova.php?sessao=<?= (int)$sessao_id ?>">
          <i class="bi bi-list-task"></i><span>Matérias da Sessão</span>
        </a>
      </div>
    </div>

    <?php if (!$sessao_id): ?>
      <div class="alert alert-warning">
        Não há sessão ativa/aberta. Abra uma sessão para usar esta tela.
      </div>
    <?php else: ?>
      <div class="mb-3">
        <span class="badge text-bg-primary">Sessão #<?= (int)$sessao_id ?></span>
        <?php if ($sm_id): ?>
          <span class="badge text-bg-success ms-2" id="badgeVot">Votação aberta</span>
          <span class="ms-1" id="matTitulo"><?= htmlspecialchars($sm['titulo'] ?? '') ?></span>
        <?php else: ?>
          <span class="badge text-bg-secondary ms-2" id="badgeVot">Sem votação aberta</span>
          <span class="ms-1" id="matTitulo"></span>
        <?php endif; ?>
      </div>

      <div class="row g-2">
        <?php foreach ($vereadores as $v):
          $vid = (int)$v['id'];

          $fotoRaw = trim($v['foto'] ?? '');
          if ($fotoRaw === '') {
            $foto = '/arapiraca/assets/avatar.png';
          } elseif (preg_match('~^https?://~i', $fotoRaw)) {
            $foto = $fotoRaw;
          } else {
            $foto = '/arapiraca/' . ltrim($fotoRaw, '/');
          }

          $isPresidente = (int)$v['eh_presidente'] === 1;
          $presente     = (int)$v['presente'] === 1;
          $voto         = $v['voto'] ?? null;

          $pend = $pendentePorVereador[$vid] ?? null;
          $pedidoPendenteId = $pend['id'] ?? 0;

          $pedidoAtivoId = $autorizadaPorVereador[$vid] ?? 0;

          // minutos sugeridos:
          // 1) se tem pendente, usa tempo_solicitado do pendente
          // 2) senão, deixa 5
          $minSug = $pend ? (int)($pend['min'] ?? 5) : 5;
        ?>
          <div class="col-12 col-md-6 col-lg-4">
            <div class="v-card <?= $presente ? 'presente' : '' ?>">
              <img class="foto" src="<?= htmlspecialchars($foto) ?>" alt="">
              <div class="flex-grow-1">
                <div class="d-flex align-items-center justify-content-between">
                  <strong><?= htmlspecialchars($v['nome']) ?></strong>
                  <?php if ($isPresidente): ?>
                    <span class="badge text-bg-warning">Presidente</span>
                  <?php endif; ?>
                </div>

                <div class="mt-1 d-flex flex-wrap gap-1 align-items-center">

                  <!-- Presença -->
                  <button
                    class="btn btn-xs <?= $presente ? 'btn-success' : 'btn-outline-success' ?> d-inline-flex align-items-center gap-1"
                    title="Confirmar presença"
                    onclick="marcarPresenca(<?= $vid ?>, <?= (int)$sessao_id ?>, 1)">
                    <i class="bi bi-person-check"></i>Presença
                  </button>

                  <button
                    class="btn btn-xs btn-outline-secondary d-inline-flex align-items-center gap-1"
                    title="Remover presença"
                    <?= $presente ? '' : 'disabled' ?>
                    onclick="marcarPresenca(<?= $vid ?>, <?= (int)$sessao_id ?>, 0)">
                    <i class="bi bi-person-x"></i>Remover
                  </button>

                  <!-- Pedir Voz -->
                  <div class="input-group input-group-sm" style="width:120px;">
                    <input
                      type="number"
                      min="1"
                      max="60"
                      value="<?= (int)$minSug ?>"
                      class="form-control form-control-sm"
                      id="voz_min_<?= $vid ?>">
                    <button
                      class="btn btn-xs btn-outline-primary d-inline-flex align-items-center gap-1"
                      title="Registrar pedido de fala com o tempo indicado"
                      onclick="pedirVoz(<?= $vid ?>, <?= (int)$sessao_id ?>)">
                      <i class="bi bi-megaphone"></i>Pedir
                    </button>
                  </div>

                  <!-- AUTORIZAR / ENCERRAR (TOGGLE) + CANCELAR (permanecer) -->
                  <?php if ($pedidoAtivoId): ?>
                    <button
                      class="btn btn-xs btn-danger d-inline-flex align-items-center gap-1"
                      title="Encerrar fala ativa deste vereador"
                      onclick="encerrarFalaAjax(<?= (int)$pedidoAtivoId ?>, <?= (int)$sessao_id ?>)">
                      <i class="bi bi-stop-circle"></i>Encerrar
                    </button>

                    <button
                      class="btn btn-xs btn-outline-secondary d-inline-flex align-items-center gap-1"
                      title="Cancelar fala ativa (remove da tela pública)"
                      onclick="cancelarFalaAjax(<?= (int)$pedidoAtivoId ?>, <?= (int)$sessao_id ?>)">
                      <i class="bi bi-ban"></i>Cancelar
                    </button>

                  <?php elseif ($pedidoPendenteId): ?>
                    <button
                      class="btn btn-xs btn-primary d-inline-flex align-items-center gap-1"
                      title="Autorizar pedido pendente deste vereador"
                      onclick="autorizarFalaAjax(<?= (int)$pedidoPendenteId ?>, <?= $vid ?>)">
                      <i class="bi bi-check2-circle"></i>Autorizar
                    </button>

                    <button
                      class="btn btn-xs btn-outline-secondary d-inline-flex align-items-center gap-1"
                      title="Cancelar pedido pendente"
                      onclick="cancelarFalaAjax(<?= (int)$pedidoPendenteId ?>, <?= (int)$sessao_id ?>)">
                      <i class="bi bi-ban"></i>Cancelar
                    </button>

                  <?php else: ?>
                    <button class="btn btn-xs btn-outline-secondary d-inline-flex align-items-center gap-1" disabled
                      title="Sem pedido pendente para autorizar">
                      <i class="bi bi-mic-mute"></i>Autorizar
                    </button>
                  <?php endif; ?>

                  <!-- Aparte manual -->
                  <button
                    id="btnAparte_<?= $vid ?>"
                    class="btn btn-xs btn-outline-dark d-inline-flex align-items-center gap-1"
                    title="Conceder / remover aparte"
                    onclick="toggleAparte(<?= $vid ?>, <?= (int)$sessao_id ?>)">
                    <i class="bi bi-chat-dots"></i>Aparte
                  </button>

                  <!-- Votar -->
                  <?php if ($sm_id && !$isPresidente): ?>
                    <div class="btn-group">
                      <button class="btn btn-xs btn-outline-success" title="Votar Favor"
                        onclick="votarPor(<?= $vid ?>, <?= (int)$sm_id ?>, 'favor')">✓</button>
                      <button class="btn btn-xs btn-outline-danger" title="Votar Contra"
                        onclick="votarPor(<?= $vid ?>, <?= (int)$sm_id ?>, 'contra')">✗</button>
                      <button class="btn btn-xs btn-outline-secondary" title="Abstenção"
                        onclick="votarPor(<?= $vid ?>, <?= (int)$sm_id ?>, 'abstencao')">Ø</button>
                    </div>
                    <?php if ($voto): ?>
                      <span class="badge badge-voto text-bg-light ms-1">
                        voto: <?= htmlspecialchars($voto) ?>
                      </span>
                    <?php endif; ?>
                  <?php endif; ?>

                </div>
              </div>
            </div>
          </div>
        <?php endforeach; ?>
      </div>
    <?php endif; ?>

  </div>

  <script>
    let CURRENT_SM_ID = <?= $sm_id ? (int)$sm_id : 'null' ?>;
    const SESSAO_ID = <?= $sessao_id ? (int)$sessao_id : 'null' ?>;

    async function api(url, opts = {}) {
      try {
        const r = await fetch(url, Object.assign({
          credentials: 'same-origin'
        }, opts));
        if (!r.ok) return null;
        const ct = (r.headers.get('content-type') || '');
        if (ct.includes('application/json')) return await r.json().catch(() => ({}));
        return await r.text().catch(() => '');
      } catch (e) {
        console.error(e);
        return null;
      }
    }

    async function marcarPresenca(vereador_id, sessao_id, presente) {
      const res = await api(
        `/arapiraca/actions.php?op=op_quorum_set&vereador_id=${vereador_id}&sessao_id=${sessao_id}&presente=${presente}`
      );
      if (res && res.ok) location.reload();
    }

    async function pedirVoz(vereador_id, sessao_id) {
      const minInput = document.getElementById('voz_min_' + vereador_id);
      let m = parseInt(minInput?.value || '5', 10);
      if (!m || m < 1) m = 1;
      if (m > 60) m = 60;

      const res = await api(
        `/arapiraca/actions.php?op=op_pedir_fala_por&vereador_id=${vereador_id}&sessao_id=${sessao_id}&min=${m}`
      );
      if (res && res.ok) {
        alert('Pedido de fala registrado com ' + m + ' minuto(s).');
        location.reload();
      } else if (res && res.msg) {
        alert(res.msg);
      } else {
        alert('Não foi possível registrar o pedido.');
      }
    }

    // Autoriza SEM trocar de tela (ignora redirect do actions.php)
    async function autorizarFalaAjax(pedido_id, vereador_id) {
      const minInput = document.getElementById('voz_min_' + vereador_id);
      let m = parseInt(minInput?.value || '5', 10);
      if (!m || m < 1) m = 1;
      if (m > 60) m = 60;

      const body = new URLSearchParams();
      body.set('id', String(pedido_id));
      body.set('min', String(m));

      const r = await fetch('/arapiraca/actions.php?op=autorizar_fala', {
        method: 'POST',
        credentials: 'same-origin',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
        },
        body
      });

      if (r.ok) {
        location.reload();
      } else {
        alert('Não foi possível autorizar.');
      }
    }

    async function encerrarFalaAjax(pedido_id, sessao_id) {
      const r = await fetch(`/arapiraca/actions.php?op=encerrar_fala&id=${pedido_id}&sessao_id=${sessao_id}`, {
        credentials: 'same-origin'
      });
      if (r.ok) location.reload();
      else alert('Não foi possível encerrar.');
    }

    async function cancelarFalaAjax(pedido_id, sessao_id) {
      const r = await fetch(`/arapiraca/actions.php?op=cancelar_fala&id=${pedido_id}&sessao_id=${sessao_id}`, {
        credentials: 'same-origin'
      });
      if (r.ok) location.reload();
      else alert('Não foi possível cancelar.');
    }

    async function toggleAparte(vereador_id, sessao_id) {
      const res = await api(`/arapiraca/actions.php?op=op_aparte_toggle&vereador_id=${vereador_id}&sessao_id=${sessao_id}`);
      const btn = document.getElementById('btnAparte_' + vereador_id);
      if (res && res.ok) {
        if (btn) btn.classList.toggle('btn-aparte-ativo');
        if (res.msg) alert(res.msg);
      } else if (res && res.msg) {
        alert(res.msg);
      }
    }

    async function votarPor(vereador_id, sm_id, v) {
      const res = await api(`/arapiraca/actions.php?op=op_votar_por&sm_id=${sm_id}&vereador_id=${vereador_id}&v=${encodeURIComponent(v)}`);
      if (res && res.ok) location.reload();
      else if (res && res.msg) alert(res.msg);
    }

    async function pollStatus() {
      if (!SESSAO_ID) return;
      const r = await api(`/arapiraca/actions.php?op=status&sessao_id=${SESSAO_ID}`);
      if (!r || !r.sessao) return;

      const materia = r.materia ?? null;
      const newSm = materia ? Number(materia.id || materia.sm_id || 0) : null;

      const badge = document.getElementById('badgeVot');
      const tit = document.getElementById('matTitulo');

      if (materia) {
        if (badge) {
          badge.className = 'badge text-bg-success';
          badge.textContent = 'Votação aberta';
        }
        if (tit) tit.textContent = materia.titulo || '';
      } else {
        if (badge) {
          badge.className = 'badge text-bg-secondary';
          badge.textContent = 'Sem votação aberta';
        }
        if (tit) tit.textContent = '';
      }

      if ((CURRENT_SM_ID || null) !== (newSm || null)) location.reload();
      CURRENT_SM_ID = newSm || null;
    }

    if (SESSAO_ID) setInterval(pollStatus, 6000);
  </script>
</body>

</html>