<?php
$pageActive = 'ordens';
$pageTitle  = 'Ordens de Serviço';
require_once __DIR__ . '/functions.php';
require_once __DIR__ . '/auth.php';
requireLogin();

$usuario = usuarioLogado();
$perfil  = $usuario['perfil'];   // ADMIN | OPERADOR | TECNICO
$uid     = (int)$usuario['id'];

// ── Filtros via GET ────────────────────────────────────────────────
$status    = $_GET['status']    ?? '';
$busca     = trim($_GET['busca'] ?? '');
$filtroTec = (int)($_GET['tecnico_id'] ?? 0);

// ── Regra de acesso ────────────────────────────────────────────────
// TECNICO sempre vê APENAS as próprias OS — não pode sobrescrever via URL
$isTecnico     = ($perfil === 'TECNICO');
$tecnicoForcado= $isTecnico ? $uid : null;  // nulo = sem restrição de técnico

// ADMIN/OPERADOR podem filtrar por técnico manualmente
$tecnicoFiltro = $tecnicoForcado ?? ($filtroTec > 0 ? $filtroTec : null);

$filtros = [];
if ($status)        $filtros['status']     = $status;
if ($busca)         $filtros['busca']      = $busca;
if ($tecnicoFiltro) $filtros['tecnico_id'] = $tecnicoFiltro;

// ── Busca OS ────────────────────────────────────────────────────────
$ordens = [];
$erroDb = '';
try {
    $ordens = getOrdens($filtros);
} catch (Throwable $e) {
    $erroDb = $e->getMessage();
}

// ── Lista de técnicos para o filtro (só ADMIN/OPERADOR vê) ──────────
$tecnicos = [];
if (!$isTecnico) {
    try {
        $tecnicos = pdo()->query(
            "SELECT id, nome FROM usuarios WHERE ativo=1 AND perfil='TECNICO' ORDER BY nome"
        )->fetchAll();
    } catch (Throwable $e) { $tecnicos = []; }
}

// ── Contadores rápidos por status (do conjunto filtrado pelo técnico) ─
$contadores = array_fill_keys(['ABERTA','AGENDADA','EM_ANDAMENTO','CONCLUIDA','CANCELADA'], 0);
foreach ($ordens as $o) {
    if (isset($contadores[$o['status']])) $contadores[$o['status']]++;
}

$statusOpts = [
    ''             => 'Todas',
    'ABERTA'       => 'Abertas',
    'AGENDADA'     => 'Agendadas',
    'EM_ANDAMENTO' => 'Em Andamento',
    'CONCLUIDA'    => 'Concluídas',
    'CANCELADA'    => 'Canceladas',
];

$statusCor = [
    'ABERTA'       => 'var(--amber)',
    'AGENDADA'     => 'var(--purple)',
    'EM_ANDAMENTO' => 'var(--cyan)',
    'CONCLUIDA'    => 'var(--green)',
    'CANCELADA'    => 'var(--muted)',
];

require_once __DIR__ . '/includes/header.php';
?>

<div class="topbar">
  <button class="btn-hamburger" onclick="abrirDrawer()" aria-label="Menu">&#9776;</button>
  <div>
    <div class="page-title">
      <?php if ($isTecnico): ?>
        Minhas Ordens de Serviço
      <?php else: ?>
        Ordens de Serviço
      <?php endif; ?>
    </div>
    <div class="page-sub">
      <?= count($ordens) ?> OS
      <?php if ($isTecnico): ?>
        · <span style="color:var(--cyan)">👷 <?= e($usuario['nome']) ?></span>
      <?php elseif ($tecnicoFiltro): ?>
        <?php $nomeTec = array_column($tecnicos,'nome','id')[$tecnicoFiltro] ?? ''; ?>
        · Técnico: <span style="color:var(--cyan)"><?= e($nomeTec) ?></span>
      <?php endif; ?>
    </div>
  </div>
  <div class="topbar-actions">
    <?php if (!$isTecnico || true): // Técnico também pode abrir OS ?>
    <a href="os_form.php" class="btn btn-primary">+ Abrir OS</a>
    <?php endif; ?>
  </div>
</div>

<div class="content">

<?php if ($erroDb): ?>
<div class="alert alert-danger">⚠ <?= e($erroDb) ?></div>
<?php endif; ?>

<!-- ── Chips de status rápido ── -->
<div style="display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px">
  <?php foreach ($statusOpts as $v => $l):
    if ($v === '') continue;
    $cnt = $contadores[$v] ?? 0;
    if ($cnt === 0 && $v !== $status) continue; // oculta status vazio (exceto o ativo)
    $cor  = $statusCor[$v]  ?? 'var(--muted)';
    $ativo= $status === $v;
  ?>
  <a href="ordens.php?status=<?= urlencode($v) ?><?= $busca?'&busca='.urlencode($busca):'' ?><?= (!$isTecnico&&$filtroTec)?'&tecnico_id='.$filtroTec:'' ?>"
     style="display:inline-flex;align-items:center;gap:5px;padding:5px 12px;
            border-radius:20px;font-size:11px;font-weight:700;text-decoration:none;
            border:1px solid <?= $cor ?><?= $ativo?'':'44' ?>;
            background:<?= $cor ?><?= $ativo?'22':'10' ?>;
            color:<?= $cor ?>">
    <?= e($l) ?>
    <span style="background:<?= $cor ?>;color:#050e1a;border-radius:10px;padding:0 6px;font-size:10px"><?= $cnt ?></span>
  </a>
  <?php endforeach; ?>
  <?php if ($status): ?>
  <a href="ordens.php<?= (!$isTecnico&&$filtroTec)?'?tecnico_id='.$filtroTec:'' ?>"
     style="padding:5px 12px;border-radius:20px;font-size:11px;color:var(--muted);
            border:1px solid var(--border);text-decoration:none">✕ Limpar</a>
  <?php endif; ?>
</div>

<!-- ── Filtros ── -->
<form method="get" class="filter-bar" style="margin-bottom:14px">
  <div class="search-wrap">
    <span class="search-icon">⌕</span>
    <input type="text" name="busca" placeholder="Nº OS, cliente, protocolo..."
           value="<?= e($busca) ?>" oninput="this.form.submit()"/>
  </div>
  <select class="filter-select" name="status" onchange="this.form.submit()">
    <?php foreach ($statusOpts as $v => $l): ?>
    <option value="<?= e($v) ?>" <?= $status===$v?'selected':'' ?>><?= e($l) ?></option>
    <?php endforeach; ?>
  </select>

  <?php if (!$isTecnico && $tecnicos): ?>
  <select class="filter-select" name="tecnico_id" onchange="this.form.submit()">
    <option value="0">Todos os técnicos</option>
    <?php foreach ($tecnicos as $t): ?>
    <option value="<?= $t['id'] ?>" <?= $filtroTec===$t['id']?'selected':'' ?>>
      👷 <?= e($t['nome']) ?>
    </option>
    <?php endforeach; ?>
  </select>
  <?php elseif ($isTecnico): ?>
  <!-- Técnico: campo oculto — forçado no PHP, não editável pelo usuário -->
  <input type="hidden" name="tecnico_id" value="<?= $uid ?>"/>
  <?php endif; ?>

  <?php if ($busca || $status || (!$isTecnico && $filtroTec)): ?>
  <a href="ordens.php" class="btn btn-ghost btn-sm">✕ Limpar</a>
  <?php endif; ?>
</form>

<?php if ($isTecnico): ?>
<!-- Aviso visual para técnicos -->
<div style="background:rgba(0,212,255,.06);border:1px solid rgba(0,212,255,.15);border-radius:8px;
            padding:9px 14px;margin-bottom:14px;display:flex;align-items:center;gap:10px;font-size:12px;color:var(--muted)">
  <span style="font-size:18px">👷</span>
  <span>Exibindo apenas as OS atribuídas a <b style="color:var(--text)"><?= e($usuario['nome']) ?></b></span>
</div>
<?php endif; ?>

<!-- ── DESKTOP: tabela ── -->
<div class="table-wrap">
  <table>
    <thead><tr>
      <th>Nº OS</th>
      <th>CLIENTE</th>
      <th>TIPO</th>
      <?php if (!$isTecnico): ?><th class="col-hide-mobile">TÉCNICO</th><?php endif; ?>
      <th>STATUS</th>
      <th class="col-hide-mobile">AGENDAMENTO</th>
      <th>ABERTURA</th>
      <th></th>
    </tr></thead>
    <tbody>
    <?php if (empty($ordens)): ?>
      <tr class="empty-row">
        <td colspan="<?= $isTecnico ? 7 : 8 ?>">
          <?php if ($busca || $status): ?>
            Nenhuma OS encontrada com esses filtros.
            <a href="ordens.php" style="color:var(--cyan)">Limpar filtros</a>
          <?php elseif ($isTecnico): ?>
            Nenhuma OS atribuída a você no momento.
          <?php else: ?>
            Nenhuma OS cadastrada.
            <a href="os_form.php" style="color:var(--cyan)">+ Abrir primeira OS</a>
          <?php endif; ?>
        </td>
      </tr>
    <?php else: foreach ($ordens as $os):
      $corStatus = $statusCor[$os['status']] ?? 'var(--muted)';
    ?>
    <tr class="clickable"
        onclick="location.href='os_detalhe.php?id=<?= (int)$os['id'] ?>'"
        style="border-left:3px solid <?= $corStatus ?>1a">
      <td class="mono text-cyan" style="font-weight:700"><?= e($os['numero_os'] ?? '—') ?></td>
      <td class="td-nome">
        <b><?= e($os['cliente_nome'] ?? '—') ?></b>
        <small><?= e($os['endereco_cidade'] ?? '') ?><?= $os['plano']?' · '.e($os['plano']):'' ?></small>
      </td>
      <td style="font-size:11px"><?= labelTipoOS($os['tipo_os'] ?? '') ?></td>
      <?php if (!$isTecnico): ?>
      <td class="col-hide-mobile" style="font-size:11px"><?= e($os['tecnico_nome'] ?: '—') ?></td>
      <?php endif; ?>
      <td><?= badgeStatus($os['status'] ?? 'ABERTA') ?></td>
      <td class="mono col-hide-mobile" style="color:var(--purple);font-size:11px">
        <?= $os['agendamento'] ? fmtData($os['agendamento']) : '—' ?>
      </td>
      <td class="mono" style="font-size:11px"><?= fmtData($os['data_abertura'] ?? '') ?></td>
      <td>
        <a href="os_detalhe.php?id=<?= (int)$os['id'] ?>"
           class="btn btn-ghost btn-xs"
           onclick="event.stopPropagation()">Ver</a>
      </td>
    </tr>
    <?php endforeach; endif; ?>
    </tbody>
  </table>
</div>

<!-- ── MOBILE: cards ── -->
<div class="card-list">
<?php if (empty($ordens)): ?>
  <div style="text-align:center;padding:28px;color:var(--muted);font-size:13px">
    <?php if ($isTecnico): ?>
      👷 Nenhuma OS atribuída a você no momento.
    <?php else: ?>
      Nenhuma OS encontrada.
    <?php endif; ?>
  </div>
<?php else: foreach ($ordens as $os):
  $cor = $statusCor[$os['status']] ?? 'var(--muted)'; ?>
<div class="cli-card" onclick="location.href='os_detalhe.php?id=<?= (int)$os['id'] ?>'"
     style="border-left:3px solid <?= $cor ?>">
  <div class="cli-card-body">
    <div class="cli-card-top">
      <div style="flex:1;min-width:0">
        <div style="font-family:var(--mono);color:var(--cyan);font-size:12px;font-weight:700">
          <?= e($os['numero_os'] ?? '—') ?>
        </div>
        <div style="font-size:14px;font-weight:700;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">
          <?= e($os['cliente_nome'] ?? '—') ?>
        </div>
        <div class="cli-card-doc">
          <?= e($os['endereco_cidade'] ?? '') ?>
          <?= $os['plano'] ? ' · '.e($os['plano']) : '' ?>
          · <?= labelTipoOS($os['tipo_os'] ?? '') ?>
        </div>
      </div>
      <div style="flex-shrink:0;text-align:right">
        <?= badgeStatus($os['status'] ?? 'ABERTA') ?>
      </div>
    </div>
    <div class="cli-card-meta" style="margin-top:7px">
      <span>📅 <?= fmtData($os['data_abertura'] ?? '', false) ?></span>
      <?php if (!$isTecnico && $os['tecnico_nome']): ?>
        <span>👷 <?= e($os['tecnico_nome']) ?></span>
      <?php endif; ?>
      <?php if ($os['agendamento']): ?>
        <span style="color:var(--purple)">🗓 <?= fmtData($os['agendamento'], false) ?></span>
      <?php endif; ?>
    </div>
  </div>
  <div class="cli-card-actions">
    <a class="cli-card-btn" href="os_detalhe.php?id=<?= (int)$os['id'] ?>"
       onclick="event.stopPropagation()">
      <span class="ico">👁</span>Ver OS
    </a>
    <a class="cli-card-btn" href="cliente_detalhe.php?id=<?= (int)$os['cliente_id'] ?>"
       onclick="event.stopPropagation()">
      <span class="ico">◎</span>Cliente
    </a>
    <?php if ($os['status'] !== 'CONCLUIDA' && $os['status'] !== 'CANCELADA'): ?>
    <a class="cli-card-btn" href="os_detalhe.php?id=<?= (int)$os['id'] ?>"
       onclick="event.stopPropagation()">
      <span class="ico">✎</span>Atender
    </a>
    <?php endif; ?>
  </div>
</div>
<?php endforeach; endif; ?>
</div>

</div><!-- /content -->
<?php require_once __DIR__ . '/includes/footer.php'; ?>
