<?php
$title = 'Movimentação';
require_once __DIR__ . '/auth.php';
require_login();
check_csrf();

/* Detecta se o usuário é admin (tenta cobrir tanto role direto quanto permissões) */
$isAdmin = (($_SESSION['user']['role'] ?? '') === 'admin');
if (function_exists('user_has_perm')) {
  $isAdmin = $isAdmin || user_has_perm('admin.*') || user_has_perm('admin');
}

/* Trata ações de mudança de status */
$act = $_POST['act'] ?? '';
if ($act && isset($_POST['id'])) {
  $id = (int)$_POST['id'];
  $allowed = ['EM_ESTOQUE','MANUTENCAO','BAIXADO'];

  if ($act === 'to' && in_array($_POST['to'] ?? '', $allowed, true)) {
    $to = $_POST['to'];

    // Bloqueia baixa para não-admin (defesa no servidor)
    if ($to === 'BAIXADO' && !$isAdmin) {
      $_SESSION['flash_error'] = 'Apenas administradores podem dar baixa em equipamentos.';
      header('Location: ' . base_url('stock.php?status=' . urlencode($_GET['status'] ?? 'EM_ESTOQUE')));
      exit;
    }

    $cur = $pdo->prepare('SELECT status FROM equipment WHERE id=?');
    $cur->execute([$id]);
    $from = $cur->fetchColumn();

    $pdo->prepare("UPDATE equipment SET status=? WHERE id=?")->execute([$to, $id]);

    $action = $to==='MANUTENCAO' ? 'MAINTENANCE' : ($to==='BAIXADO' ? 'WRITE_OFF' : 'STATUS_CHANGE');
    $pdo->prepare("INSERT INTO equipment_log (equipment_id,user_id,action,from_status,to_status,notes) VALUES (?,?,?,?,?,?)")
        ->execute([$id, current_user()['id'], $action, $from, $to, 'Ação manual na tela de estoque']);

    $_SESSION['flash_ok'] = 'Status atualizado com sucesso.';
    header('Location: ' . base_url('stock.php?status=' . urlencode($_GET['status'] ?? 'EM_ESTOQUE')));
    exit;
  }
}

$status = $_GET['status'] ?? 'EM_ESTOQUE';

$rows = $pdo->prepare("
  SELECT e.*, et.name tipo
  FROM equipment e
  JOIN equipment_types et ON et.id = e.type_id
  WHERE e.status = ?
  ORDER BY e.id DESC
  LIMIT 300
");
$rows->execute([$status]);
$rows = $rows->fetchAll();

include __DIR__ . '/header.php';
?>
<div class="container-fluid">
  <div class="d-flex justify-content-between align-items-center mb-3">
    <h2 class="h5 m-0">Estoque</h2>
    <div class="d-flex gap-1">
      <?php foreach (['EM_ESTOQUE','EMPRESTADO','MANUTENCAO','BAIXADO','PERDIDO'] as $s): ?>
        <a class="btn btn-sm <?= $status===$s?'btn-primary':'btn-outline-primary' ?>" href="?status=<?= h($s) ?>"><?= h($s) ?></a>
      <?php endforeach; ?>
    </div>
  </div>

  <?php if (!empty($_SESSION['flash_error'])): ?>
    <div class="alert alert-danger py-2"><?= h($_SESSION['flash_error']) ?></div>
    <?php unset($_SESSION['flash_error']); ?>
  <?php endif; ?>
  <?php if (!empty($_SESSION['flash_ok'])): ?>
    <div class="alert alert-success py-2"><?= h($_SESSION['flash_ok']) ?></div>
    <?php unset($_SESSION['flash_ok']); ?>
  <?php endif; ?>

  <div class="table-responsive">
    <table class="table table-hover table-striped align-middle">
      <thead>
        <tr>
          <th>Tipo/Modelo</th>
          <th>Patrimônio</th>
          <th>Service tag</th>
          <th>Status</th>
          <th class="text-start">Ações</th>
        </tr>
      </thead>
      <tbody>
        <?php foreach ($rows as $r): ?>
          <tr>
            <td><?= h(($r['tipo'] ?? '—') . ($r['modelo'] ? ' • '.$r['modelo'] : '')) ?></td>
            <td><?= h($r['patrimonio'] ?? '—') ?></td>
            <td><?= h($r['serial'] ?? '—') ?></td>
            <td><span class="badge bg-secondary"><?= h($r['status']) ?></span></td>
            <td class="text-start">
              <!-- Para estoque -->
              <form method="post" class="d-inline">
                <input type="hidden" name="csrf" value="<?= h(csrf_token()) ?>">
                <input type="hidden" name="act" value="to">
                <input type="hidden" name="id" value="<?= (int)$r['id'] ?>">
                <input type="hidden" name="to" value="EM_ESTOQUE">
                <button class="btn btn-sm btn-success" <?= $r['status']==='EM_ESTOQUE'?'disabled':'' ?>>Para estoque</button>
              </form>

              <!-- Manutenção -->
              <form method="post" class="d-inline">
                <input type="hidden" name="csrf" value="<?= h(csrf_token()) ?>">
                <input type="hidden" name="act" value="to">
                <input type="hidden" name="id" value="<?= (int)$r['id'] ?>">
                <input type="hidden" name="to" value="MANUTENCAO">
                <button class="btn btn-sm btn-warning" <?= $r['status']==='MANUTENCAO'?'disabled':'' ?>>Manutenção</button>
              </form>

              <!-- Dar baixa: somente admin vê habilitado -->
              <?php if ($isAdmin): ?>
                <form method="post" class="d-inline" data-confirm="Confirmar baixa deste equipamento? Essa ação registra nos logs.">
                  <input type="hidden" name="csrf" value="<?= h(csrf_token()) ?>">
                  <input type="hidden" name="act" value="to">
                  <input type="hidden" name="id" value="<?= (int)$r['id'] ?>">
                  <input type="hidden" name="to" value="BAIXADO">
                  <button class="btn btn-sm btn-outline-danger" <?= $r['status']==='BAIXADO'?'disabled':'' ?>>Dar baixa</button>
                </form>
              <?php else: ?>
                <button class="btn btn-sm btn-outline-danger" title="Apenas administradores podem dar baixa" disabled>Dar baixa</button>
              <?php endif; ?>
            </td>
          </tr>
        <?php endforeach; ?>
        <?php if (!$rows): ?>
          <tr><td colspan="5" class="text-muted">Sem itens nesse status.</td></tr>
        <?php endif; ?>
      </tbody>
    </table>
  </div>
</div>

<script>
// "Micro" confirmação só nos formulários que pedirem (data-confirm)
document.querySelectorAll('form[data-confirm]').forEach(function (f) {
  f.addEventListener('submit', function (e) {
    if (!confirm(f.getAttribute('data-confirm'))) e.preventDefault();
  });
});
</script>

<?php include __DIR__ . '/footer.php'; ?>

