<?php
require_once '../5_config/config.php';
$usuario = verificarAuth();
$db = getDB();
$perfil = $usuario['perfil'];
$msg = '';
Auditoria::inicializar($db, $usuario['id'], $usuario['nome'], $usuario['perfil']);

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $acao_form = $_POST['acao_form'] ?? '';

    if ($acao_form === 'salvar_nc' && temPermissao('criar', $perfil)) {
        $unidade_id    = intval($_POST['unidade_id'] ?? 0);
        $descricao     = limpar($_POST['descricao'] ?? '');
        $ref_item      = limpar($_POST['referencia_item'] ?? '');

        if ($unidade_id && $descricao) {
            $db->prepare("INSERT INTO nao_conformidades (unidade_id,descricao,referencia_item,criado_por) VALUES (?,?,?,?)")
               ->execute([$unidade_id,$descricao,$ref_item,$usuario['id']]);
            $nc_novo_id = (int)$db->lastInsertId();
            Auditoria::criar('nao_conformidades', $nc_novo_id, ['descricao'=>$descricao,'referencia_item'=>$ref_item,'unidade_id'=>$unidade_id], "NC registrada: " . substr($descricao,0,60));
            header('Location: nao_conformidades.php?msg=success:N%C3%A3o+conformidade+registrada!'); exit;
        } else {
            header('Location: nao_conformidades.php?msg=error:Preencha+os+campos+obrigat%C3%B3rios.'); exit;
        }

    } elseif ($acao_form === 'salvar_plano' && temPermissao('criar', $perfil)) {
        $nc_id    = intval($_POST['nc_id'] ?? 0);
        $what     = limpar($_POST['what'] ?? '');
        $why      = limpar($_POST['why'] ?? '');
        $where_l  = limpar($_POST['where_local'] ?? '');
        $when     = $_POST['when_data'] ?: null;
        $who      = limpar($_POST['who'] ?? '');
        $how      = limpar($_POST['how'] ?? '');
        $how_much = limpar($_POST['how_much'] ?? '');

        if ($nc_id && $what) {
            $db->prepare("INSERT INTO planos_acao (nao_conformidade_id,what,why,where_local,when_data,who,how,how_much,criado_por) VALUES (?,?,?,?,?,?,?,?,?)")
               ->execute([$nc_id,$what,$why,$where_l,$when,$who,$how,$how_much,$usuario['id']]);
            $plano_id = (int)$db->lastInsertId();
            $db->prepare("UPDATE nao_conformidades SET status='em_tratamento' WHERE id=? AND status='aberta'")->execute([$nc_id]);
            Auditoria::criar('planos_acao', $plano_id, ['nc_id'=>$nc_id,'what'=>$what,'who'=>$who,'when'=>$when], "Plano 5W2H criado para NC #$nc_id");
            header('Location: nao_conformidades.php?msg=success:Plano+de+a%C3%A7%C3%A3o+5W2H+criado!'); exit;
        } else {
            header('Location: nao_conformidades.php?msg=error:Preencha+pelo+menos+o+campo+O+qu%C3%AA.'); exit;
        }

    } elseif ($acao_form === 'encerrar_nc' && temPermissao('editar', $perfil)) {
        $id = intval($_POST['id'] ?? 0);
        if ($id > 0) {
            $db->prepare("UPDATE nao_conformidades SET status='encerrada' WHERE id=?")->execute([$id]);
            Auditoria::atualizar('nao_conformidades', $id, ['status'=>'aberta'], ['status'=>'encerrada'], "NC #$id encerrada");
        }
        header('Location: nao_conformidades.php?msg=success:N%C3%A3o+conformidade+encerrada!'); exit;

    } elseif ($acao_form === 'excluir_nc' && temPermissao('excluir', $perfil)) {
        $id = intval($_POST['id'] ?? 0);
        if ($id > 0) {
            $stmt_del = $db->prepare("SELECT descricao FROM nao_conformidades WHERE id=?");
            $stmt_del->execute([$id]); $reg_del = $stmt_del->fetch() ?: [];
            $db->prepare("DELETE FROM nao_conformidades WHERE id=?")->execute([$id]);
            Auditoria::deletar('nao_conformidades', $id, $reg_del, "NC excluída: " . substr($reg_del['descricao'] ?? 'ID '.$id, 0, 60));
        }
        header('Location: nao_conformidades.php?msg=success:Registro+removido!'); exit;
    }
}

// Ler mensagem da URL (padrão PRG)
$msg = $_GET['msg'] ?? '';

$filtro_unidade = intval($_GET['unidade_id'] ?? 0);
$filtro_status  = sanitizar($_GET['status'] ?? '');
$unidades = $db->query("SELECT id,codigo,nome FROM unidades WHERE ativo=1 ORDER BY nome")->fetchAll();

$where = ['1=1']; $params = [];
if ($filtro_unidade) { $where[] = 'nc.unidade_id=?'; $params[] = $filtro_unidade; }
if ($filtro_status)  { $where[] = 'nc.status=?';     $params[] = $filtro_status; }
$sql = "SELECT nc.*, u.nome AS unidade_nome, u.codigo AS unidade_codigo FROM nao_conformidades nc LEFT JOIN unidades u ON u.id=nc.unidade_id WHERE " . implode(' AND ', $where) . " ORDER BY nc.criado_em DESC";
$stmt = $db->prepare($sql); $stmt->execute($params);
$ncs = $stmt->fetchAll();

// Carregar planos de ação para cada NC
$nc_ids = array_column($ncs, 'id');
$planos_map = [];
if (!empty($nc_ids)) {
    $in = implode(',', array_fill(0, count($nc_ids), '?'));
    $stmt_p = $db->prepare("SELECT * FROM planos_acao WHERE nao_conformidade_id IN ($in) ORDER BY criado_em ASC");
    $stmt_p->execute($nc_ids);
    foreach ($stmt_p->fetchAll() as $p) {
        $planos_map[$p['nao_conformidade_id']][] = $p;
    }
}

$status_labels = ['aberta'=>'Aberta','em_tratamento'=>'Em Tratamento','encerrada'=>'Encerrada'];
$plano_status_labels = ['pendente'=>'Pendente','em_andamento'=>'Em Andamento','concluido'=>'Concluído'];
$pagina_titulo = 'Não Conformidades';
require_once '../1_frontend/layout.php';
?>

<div class="space-y-5">
  <div class="flex items-center justify-between flex-wrap gap-3">
    <div>
      <h1 class="text-2xl font-bold text-actsafe-text flex items-center gap-2">
        <i data-lucide="alert-triangle" class="w-6 h-6 text-red-500"></i> Não Conformidades
      </h1>
      <p class="text-sm text-gray-500 mt-0.5">Registro e tratamento com Plano de Ação 5W2H</p>
    </div>
    <?php if (temPermissao('criar', $perfil)): ?>
    <button onclick="document.getElementById('form-nc').classList.toggle('hidden')" class="btn-danger">
      <i data-lucide="plus" class="w-4 h-4"></i> Registrar NC
    </button>
    <?php endif; ?>
  </div>

  <?php if ($msg): [$tipo_msg,$texto_msg] = explode(':', $msg, 2); ?>
  <div class="flex items-center gap-2 px-4 py-3 rounded-lg text-sm font-medium
    <?= $tipo_msg==='success' ? 'bg-green-50 border border-green-200 text-green-700' : 'bg-red-50 border border-red-200 text-red-700' ?>">
    <i data-lucide="<?= $tipo_msg==='success' ? 'check-circle' : 'alert-circle' ?>" class="w-4 h-4"></i>
    <?= sanitizar($texto_msg) ?>
  </div>
  <?php endif; ?>

  <!-- Formulário de NC -->
  <div id="form-nc" class="hidden card border-l-4 border-red-400">
    <h2 class="font-semibold text-actsafe-text mb-4 flex items-center gap-2">
      <i data-lucide="alert-triangle" class="w-4 h-4 text-red-500"></i> Registrar Não Conformidade
    </h2>
    <form method="POST" action="nao_conformidades.php">
      <input type="hidden" name="acao_form" value="salvar_nc">
      <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
        <div>
          <label class="form-label">Unidade Fabril *</label>
          <select name="unidade_id" class="form-input" required>
            <option value="">Selecione...</option>
            <?php foreach ($unidades as $u): ?>
            <option value="<?= $u['id'] ?>"><?= sanitizar($u['codigo']) ?> — <?= sanitizar($u['nome']) ?></option>
            <?php endforeach; ?>
          </select>
        </div>
        <div>
          <label class="form-label">Referência Normativa (Item)</label>
          <input type="text" name="referencia_item" class="form-input" placeholder="ex: NR 10 item 10.2.4">
        </div>
        <div class="sm:col-span-2">
          <label class="form-label">Descrição da Não Conformidade *</label>
          <textarea name="descricao" class="form-input" rows="3" placeholder="Descreva detalhadamente a não conformidade encontrada..." required></textarea>
        </div>
      </div>
      <div class="flex gap-2 mt-4">
        <button type="submit" class="btn-danger"><i data-lucide="save" class="w-4 h-4"></i> Registrar</button>
        <button type="button" onclick="document.getElementById('form-nc').classList.add('hidden')" class="btn-outline">Cancelar</button>
      </div>
    </form>
  </div>

  <!-- Filtros -->
  <form method="GET" action="nao_conformidades.php" class="flex flex-wrap gap-2">
    <select name="unidade_id" class="form-input w-auto">
      <option value="">Todas as unidades</option>
      <?php foreach ($unidades as $u): ?>
      <option value="<?= $u['id'] ?>" <?= $filtro_unidade == $u['id'] ? 'selected' : '' ?>><?= sanitizar($u['codigo']) ?> — <?= sanitizar($u['nome']) ?></option>
      <?php endforeach; ?>
    </select>
    <select name="status" class="form-input w-auto">
      <option value="">Todos os status</option>
      <?php foreach ($status_labels as $v => $l): ?>
      <option value="<?= $v ?>" <?= $filtro_status === $v ? 'selected' : '' ?>><?= $l ?></option>
      <?php endforeach; ?>
    </select>
    <button type="submit" class="btn-primary"><i data-lucide="filter" class="w-4 h-4"></i> Filtrar</button>
    <a href="nao_conformidades.php" class="btn-outline">Limpar</a>
  </form>

  <!-- Lista de NCs -->
  <?php if (empty($ncs)): ?>
  <div class="card border border-dashed border-gray-300 text-center py-14">
    <i data-lucide="check-circle" class="w-10 h-10 text-green-300 mx-auto mb-3"></i>
    <p class="text-gray-500 text-sm">Nenhuma não conformidade registrada.</p>
  </div>
  <?php else: ?>
  <div class="space-y-3">
    <?php foreach ($ncs as $nc):
      $planos = $planos_map[$nc['id']] ?? [];
      $nc_id_str = 'nc_' . $nc['id'];
    ?>
    <div class="card p-0 overflow-hidden">
      <!-- Cabeçalho da NC -->
      <div class="flex items-center gap-3 px-4 py-3 cursor-pointer hover:bg-gray-50 transition-colors"
           onclick="document.getElementById('<?= $nc_id_str ?>').classList.toggle('hidden')">
        <i data-lucide="alert-triangle" class="w-4 h-4 text-red-400 flex-shrink-0"></i>
        <div class="flex-1 min-w-0">
          <p class="text-sm font-semibold text-actsafe-text"><?= sanitizar($nc['descricao']) ?></p>
          <p class="text-xs text-gray-400">
            <?= sanitizar($nc['unidade_codigo']) ?>
            <?php if ($nc['referencia_item']): ?> · Ref: <?= sanitizar($nc['referencia_item']) ?><?php endif; ?>
            · <?= date('d/m/Y', strtotime($nc['criado_em'])) ?>
          </p>
        </div>
        <span class="badge-status badge-<?= $nc['status'] ?> flex-shrink-0"><?= $status_labels[$nc['status']] ?></span>
        <i data-lucide="chevron-down" class="w-4 h-4 text-gray-400 flex-shrink-0"></i>
      </div>

      <!-- Planos de Ação (expansível) -->
      <div id="<?= $nc_id_str ?>" class="hidden border-t border-gray-100 bg-gray-50 px-4 py-3 space-y-3">
        <div class="flex items-center justify-between">
          <p class="text-xs font-semibold text-gray-600 flex items-center gap-1.5">
            <i data-lucide="clipboard-list" class="w-3.5 h-3.5"></i> Planos de Ação 5W2H (<?= count($planos) ?>)
          </p>
          <div class="flex gap-2">
            <?php if ($nc['status'] !== 'encerrada' && temPermissao('criar', $perfil)): ?>
            <button onclick="document.getElementById('form-plano-<?= $nc['id'] ?>').classList.toggle('hidden')"
                    class="text-xs bg-actsafe-blue text-white px-2.5 py-1 rounded-lg flex items-center gap-1 hover:bg-actsafe-dark transition-colors">
              <i data-lucide="plus" class="w-3 h-3"></i> Novo Plano
            </button>
            <?php endif; ?>
            <?php if ($nc['status'] !== 'encerrada' && temPermissao('editar', $perfil)): ?>
            <form method="POST" action="nao_conformidades.php" class="inline" onsubmit="return confirm('Encerrar esta não conformidade?')">
              <input type="hidden" name="acao_form" value="encerrar_nc">
              <input type="hidden" name="id" value="<?= $nc['id'] ?>">
              <button type="submit" class="text-xs bg-green-600 text-white px-2.5 py-1 rounded-lg flex items-center gap-1 hover:bg-green-700 transition-colors">
                <i data-lucide="check-circle" class="w-3 h-3"></i> Encerrar NC
              </button>
            </form>
            <?php endif; ?>
            <?php if (temPermissao('excluir', $perfil)): ?>
            <form method="POST" action="nao_conformidades.php" class="inline" onsubmit="return confirmarExclusao(this)">
              <input type="hidden" name="acao_form" value="excluir_nc">
              <input type="hidden" name="id" value="<?= $nc['id'] ?>">
              <button type="submit" class="text-xs text-red-400 hover:text-red-600 px-1 py-1 rounded flex items-center gap-1">
                <i data-lucide="trash-2" class="w-3 h-3"></i>
              </button>
            </form>
            <?php endif; ?>
          </div>
        </div>

        <!-- Formulário de Plano 5W2H -->
        <div id="form-plano-<?= $nc['id'] ?>" class="hidden bg-white rounded-xl border border-actsafe-blue/20 p-4">
          <p class="text-xs font-bold text-actsafe-blue mb-3 flex items-center gap-1.5">
            <i data-lucide="clipboard-list" class="w-3.5 h-3.5"></i> Novo Plano de Ação — 5W2H
          </p>
          <form method="POST" action="nao_conformidades.php">
            <input type="hidden" name="acao_form" value="salvar_plano">
            <input type="hidden" name="nc_id" value="<?= $nc['id'] ?>">
            <div class="grid grid-cols-1 sm:grid-cols-2 gap-3">
              <div class="sm:col-span-2">
                <label class="form-label text-xs">O quê será feito? (What) *</label>
                <input type="text" name="what" class="form-input text-sm" placeholder="Ação a ser executada" required>
              </div>
              <div>
                <label class="form-label text-xs">Por quê? (Why)</label>
                <input type="text" name="why" class="form-input text-sm" placeholder="Justificativa">
              </div>
              <div>
                <label class="form-label text-xs">Onde? (Where)</label>
                <input type="text" name="where_local" class="form-input text-sm" placeholder="Local de execução">
              </div>
              <div>
                <label class="form-label text-xs">Quem? (Who)</label>
                <input type="text" name="who" class="form-input text-sm" placeholder="Responsável">
              </div>
              <div>
                <label class="form-label text-xs">Quando? (When)</label>
                <input type="date" name="when_data" class="form-input text-sm">
              </div>
              <div class="sm:col-span-2">
                <label class="form-label text-xs">Como? (How)</label>
                <textarea name="how" class="form-input text-sm" rows="2" placeholder="Metodologia / procedimento"></textarea>
              </div>
              <div>
                <label class="form-label text-xs">Quanto custará? (How Much)</label>
                <input type="text" name="how_much" class="form-input text-sm" placeholder="ex: R$ 2.500,00 ou Sem custo">
              </div>
            </div>
            <div class="flex gap-2 mt-3">
              <button type="submit" class="btn-primary text-xs py-1.5"><i data-lucide="save" class="w-3.5 h-3.5"></i> Salvar Plano</button>
              <button type="button" onclick="document.getElementById('form-plano-<?= $nc['id'] ?>').classList.add('hidden')" class="btn-outline text-xs py-1.5">Cancelar</button>
            </div>
          </form>
        </div>

        <!-- Planos existentes -->
        <?php if (empty($planos)): ?>
        <p class="text-xs text-gray-400 text-center py-2">Nenhum plano de ação criado ainda.</p>
        <?php else: ?>
        <?php foreach ($planos as $p): ?>
        <div class="bg-white rounded-lg border border-gray-200 p-3">
          <div class="flex items-center justify-between mb-2">
            <span class="text-xs font-bold text-actsafe-blue">Plano #<?= $p['id'] ?></span>
            <span class="badge-status badge-<?= $p['status'] ?> text-[10px]"><?= $plano_status_labels[$p['status']] ?></span>
          </div>
          <div class="grid grid-cols-2 gap-x-4 gap-y-1 text-xs">
            <?php if ($p['what']): ?><div><span class="text-gray-400 font-medium">O quê:</span> <span class="text-gray-700"><?= sanitizar($p['what']) ?></span></div><?php endif; ?>
            <?php if ($p['why']): ?><div><span class="text-gray-400 font-medium">Por quê:</span> <span class="text-gray-700"><?= sanitizar($p['why']) ?></span></div><?php endif; ?>
            <?php if ($p['where_local']): ?><div><span class="text-gray-400 font-medium">Onde:</span> <span class="text-gray-700"><?= sanitizar($p['where_local']) ?></span></div><?php endif; ?>
            <?php if ($p['who']): ?><div><span class="text-gray-400 font-medium">Quem:</span> <span class="text-gray-700"><?= sanitizar($p['who']) ?></span></div><?php endif; ?>
            <?php if ($p['when_data']): ?><div><span class="text-gray-400 font-medium">Quando:</span> <span class="text-gray-700"><?= formatarData($p['when_data']) ?></span></div><?php endif; ?>
            <?php if ($p['how_much']): ?><div><span class="text-gray-400 font-medium">Custo:</span> <span class="text-gray-700"><?= sanitizar($p['how_much']) ?></span></div><?php endif; ?>
            <?php if ($p['how']): ?><div class="col-span-2"><span class="text-gray-400 font-medium">Como:</span> <span class="text-gray-700"><?= sanitizar($p['how']) ?></span></div><?php endif; ?>
          </div>
        </div>
        <?php endforeach; ?>
        <?php endif; ?>
      </div>
    </div>
    <?php endforeach; ?>
  </div>
  <p class="text-xs text-gray-400"><?= count($ncs) ?> não conformidade(s) encontrada(s)</p>
  <?php endif; ?>
</div>

<?php require_once '../1_frontend/layout_footer.php'; ?>
