<?php
// ============================================================
// ERP - ActSafe | Organizador de Etiquetas QR Code
// Suporta: NR12 (equipamentos) e NR10 (painéis elétricos)
// Exporta PDF via TCPDF com filtros configuráveis
// ============================================================
require_once __DIR__ . '/5_config/config.php';
$usuario = verificarAuth();
$db      = getDB();

// ============================================================
// GERAR PDF (ação POST)
// ============================================================
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['acao'] ?? '') === 'gerar_pdf') {

    $modulo       = limpar($_POST['modulo']       ?? 'nr12');
    $unidade_id   = intval($_POST['unidade_id']   ?? 0);
    $filtro_status= limpar($_POST['filtro_status'] ?? '');
    $colunas      = max(1, min(6, intval($_POST['colunas']  ?? 3)));
    $linhas       = max(1, min(10, intval($_POST['linhas']  ?? 4)));
    $tam_etiqueta = limpar($_POST['tam_etiqueta'] ?? 'medio');

    // Dimensões da etiqueta em mm
    $tamanhos = [
        'pequeno' => ['w' => 50, 'h' => 35, 'qr' => 22, 'font_nome' => 7, 'font_cod' => 6],
        'medio'   => ['w' => 65, 'h' => 45, 'qr' => 30, 'font_nome' => 8, 'font_cod' => 7],
        'grande'  => ['w' => 90, 'h' => 60, 'qr' => 42, 'font_nome' => 9, 'font_cod' => 8],
    ];
    $dim = $tamanhos[$tam_etiqueta] ?? $tamanhos['medio'];

    // ---- Buscar registros ----
    [$where_u, $params_u] = filtroUnidade($usuario, ($modulo === 'nr12' ? 'e' : 'p'));
    $where  = [$where_u];
    $params = $params_u;

    if ($unidade_id) {
        $where[]  = ($modulo === 'nr12' ? 'e' : 'p') . '.unidade_id=?';
        $params[] = $unidade_id;
    }

    if ($modulo === 'nr12') {
        if ($filtro_status) { $where[] = 'eq.codigo_unico IS NOT NULL'; } // só com QR
        $sql = "SELECT e.id, e.cod, e.nome, e.tag, e.familia, u.nome AS unidade_nome,
                       eq.codigo_unico, eq.url_publica
                FROM equipamentos e
                LEFT JOIN unidades u ON u.id = e.unidade_id
                LEFT JOIN equipamento_qrcodes eq ON eq.equipamento_id = e.id
                WHERE " . implode(' AND ', $where) . "
                  AND eq.codigo_unico IS NOT NULL
                ORDER BY e.cod ASC";
    } else {
        $sql = "SELECT p.id, p.codigo, p.nome, p.tag, p.nivel_tensao, p.status, u.nome AS unidade_nome,
                       pq.codigo_unico, pq.url_publica
                FROM paineis_eletricos p
                LEFT JOIN unidades u ON u.id = p.unidade_id
                LEFT JOIN painel_qrcodes pq ON pq.painel_id = p.id
                WHERE " . implode(' AND ', $where) . "
                  AND pq.codigo_unico IS NOT NULL
                ORDER BY p.codigo ASC";
        if ($filtro_status) {
            $sql = str_replace('ORDER BY', 'AND p.status=? ORDER BY', $sql);
            $params[] = $filtro_status;
        }
    }

    $stmt = $db->prepare($sql);
    $stmt->execute($params);
    $registros = $stmt->fetchAll();

    if (empty($registros)) {
        header('Location: etiquetas_qr.php?msg=error:Nenhum+registro+encontrado+com+QR+Code+gerado.');
        exit;
    }

    // ---- Montar PDF com TCPDF ----
    require_once __DIR__ . '/5_config/tcpdf/tcpdf.php';

    // Calcular tamanho de página para caber colunas × linhas de etiquetas
    $margem  = 10; // mm
    $espaco  = 3;  // mm entre etiquetas
    $pag_w   = ($dim['w'] * $colunas) + ($espaco * ($colunas - 1)) + ($margem * 2);
    $pag_h   = ($dim['h'] * $linhas)  + ($espaco * ($linhas  - 1)) + ($margem * 2);

    $pdf = new TCPDF('P', 'mm', [$pag_w, $pag_h], true, 'UTF-8', false);
    $pdf->SetCreator(APP_NAME);
    $pdf->SetAuthor(APP_AUTHOR);
    $pdf->SetTitle('Etiquetas QR Code — ' . ($modulo === 'nr12' ? 'NR 12 Equipamentos' : 'NR 10 Painéis'));
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);
    $pdf->SetMargins($margem, $margem, $margem);
    $pdf->SetAutoPageBreak(false);
    $pdf->AddPage();

    $col = 0;
    $lin = 0;
    $total = count($registros);

    foreach ($registros as $i => $reg) {
        // Posição X, Y da etiqueta atual
        $x = $margem + $col * ($dim['w'] + $espaco);
        $y = $margem + $lin * ($dim['h'] + $espaco);

        // Borda da etiqueta
        $pdf->SetDrawColor(180, 180, 180);
        $pdf->SetLineWidth(0.3);
        $pdf->Rect($x, $y, $dim['w'], $dim['h']);

        // QR Code (TCPDF nativo)
        $url_qr = $reg['url_publica'];
        $qr_x   = $x + 2;
        $qr_y   = $y + 2;
        $qr_s   = $dim['qr'];
        $pdf->write2DBarcode($url_qr, 'QRCODE,H', $qr_x, $qr_y, $qr_s, $qr_s, ['border' => false, 'padding' => 0], 'N');

        // Textos à direita do QR
        $txt_x = $qr_x + $qr_s + 2;
        $txt_w = $dim['w'] - $qr_s - 6;

        // Módulo / tipo
        $modulo_label = ($modulo === 'nr12') ? 'NR 12' : 'NR 10';
        $pdf->SetFont('helvetica', 'B', $dim['font_cod'] - 1);
        $pdf->SetTextColor(15, 76, 129); // azul actsafe
        $pdf->SetXY($txt_x, $y + 2);
        $pdf->Cell($txt_w, 4, $modulo_label, 0, 1, 'L');

        // Código
        $cod = $modulo === 'nr12' ? ($reg['cod'] ?? '') : ($reg['codigo'] ?? '');
        $pdf->SetFont('helvetica', 'B', $dim['font_cod']);
        $pdf->SetTextColor(0, 0, 0);
        $pdf->SetXY($txt_x, $y + 7);
        $pdf->Cell($txt_w, 4, sanitizar($cod), 0, 1, 'L');

        // Nome (quebra linha se necessário)
        $nome = $reg['nome'] ?? '';
        $pdf->SetFont('helvetica', '', $dim['font_nome']);
        $pdf->SetTextColor(50, 50, 50);
        $pdf->SetXY($txt_x, $y + 12);
        $pdf->MultiCell($txt_w, 3.5, sanitizar($nome), 0, 'L', false, 1, '', '', true, 0, false, true, ($dim['h'] - 14), 'T');

        // TAG (se existir)
        if (!empty($reg['tag'])) {
            $pdf->SetFont('helvetica', 'I', $dim['font_cod'] - 1);
            $pdf->SetTextColor(100, 100, 100);
            $pdf->SetXY($txt_x, $y + $dim['h'] - 10);
            $pdf->Cell($txt_w, 3.5, 'TAG: ' . sanitizar($reg['tag']), 0, 1, 'L');
        }

        // Unidade (rodapé da etiqueta, abaixo do QR)
        $pdf->SetFont('helvetica', '', $dim['font_cod'] - 1);
        $pdf->SetTextColor(80, 80, 80);
        $pdf->SetXY($x + 1, $y + $dim['h'] - 5);
        $pdf->Cell($dim['w'] - 2, 3.5, sanitizar($reg['unidade_nome'] ?? ''), 0, 1, 'C');

        // Código único (pequeno, abaixo do QR)
        $pdf->SetFont('courier', '', $dim['font_cod'] - 2);
        $pdf->SetTextColor(120, 120, 120);
        $pdf->SetXY($qr_x, $y + $qr_s + 2);
        $pdf->Cell($qr_s, 3, sanitizar($reg['codigo_unico']), 0, 1, 'C');

        // Avançar posição
        $col++;
        if ($col >= $colunas) {
            $col = 0;
            $lin++;
            if ($lin >= $linhas && ($i + 1) < $total) {
                // Nova página
                $pdf->AddPage();
                $col = 0;
                $lin = 0;
            }
        }
    }

    $nome_arquivo = 'etiquetas_qr_' . ($modulo === 'nr12' ? 'nr12' : 'nr10') . '_' . date('Ymd_His') . '.pdf';
    $pdf->Output($nome_arquivo, 'D'); // D = forçar download
    exit;
}

// ============================================================
// TELA DE FILTROS (GET)
// ============================================================
$msg       = $_GET['msg'] ?? '';
$unidades  = $db->query("SELECT id, codigo, nome FROM unidades WHERE ativo=1 ORDER BY nome")->fetchAll();

// Contar registros com QR gerado (para exibir preview)
$total_nr12 = $db->query("SELECT COUNT(*) FROM equipamentos e INNER JOIN equipamento_qrcodes eq ON eq.equipamento_id=e.id")->fetchColumn();
$total_nr10 = $db->query("SELECT COUNT(*) FROM paineis_eletricos p INNER JOIN painel_qrcodes pq ON pq.painel_id=p.id")->fetchColumn();

require_once __DIR__ . '/1_frontend/layout.php';
?>
<div class="p-4 md:p-6 max-w-3xl mx-auto">

  <!-- HEADER -->
  <div class="flex items-center gap-3 mb-6">
    <div class="p-2 bg-blue-100 rounded-xl">
      <i data-lucide="qr-code" class="w-6 h-6 text-blue-700"></i>
    </div>
    <div>
      <h1 class="text-xl font-bold text-gray-900">Organizador de Etiquetas QR Code</h1>
      <p class="text-sm text-gray-500">Gere PDF com etiquetas para impressão — NR 12 e NR 10</p>
    </div>
  </div>

  <?php if ($msg): ?>
    <?php [$tipo_msg, $texto_msg] = explode(':', $msg, 2); ?>
    <div class="mb-4 px-4 py-3 rounded-lg text-sm font-medium <?= $tipo_msg === 'error' ? 'bg-red-50 text-red-700 border border-red-200' : 'bg-green-50 text-green-700 border border-green-200' ?>">
      <?= sanitizar(urldecode($texto_msg)) ?>
    </div>
  <?php endif; ?>

  <!-- CONTADORES -->
  <div class="grid grid-cols-2 gap-4 mb-6">
    <div class="bg-blue-50 border border-blue-200 rounded-xl p-4 flex items-center gap-3">
      <i data-lucide="cog" class="w-8 h-8 text-blue-600 flex-shrink-0"></i>
      <div>
        <p class="text-2xl font-bold text-blue-700"><?= $total_nr12 ?></p>
        <p class="text-xs text-blue-600 font-medium">Equipamentos NR 12 com QR</p>
      </div>
    </div>
    <div class="bg-yellow-50 border border-yellow-200 rounded-xl p-4 flex items-center gap-3">
      <i data-lucide="zap" class="w-8 h-8 text-yellow-600 flex-shrink-0"></i>
      <div>
        <p class="text-2xl font-bold text-yellow-700"><?= $total_nr10 ?></p>
        <p class="text-xs text-yellow-600 font-medium">Painéis NR 10 com QR</p>
      </div>
    </div>
  </div>

  <!-- FORMULÁRIO DE FILTROS -->
  <form method="POST" action="etiquetas_qr.php" class="bg-white border border-gray-200 rounded-2xl shadow-sm p-6 space-y-6">
    <input type="hidden" name="acao" value="gerar_pdf">

    <!-- MÓDULO -->
    <div>
      <label class="block text-sm font-semibold text-gray-700 mb-2">Módulo</label>
      <div class="grid grid-cols-2 gap-3">
        <label class="flex items-center gap-3 p-3 border-2 border-blue-500 bg-blue-50 rounded-xl cursor-pointer has-[:checked]:border-blue-600">
          <input type="radio" name="modulo" value="nr12" checked class="accent-blue-600">
          <div>
            <p class="font-semibold text-blue-700 text-sm">NR 12 — Equipamentos</p>
            <p class="text-xs text-gray-500"><?= $total_nr12 ?> com QR gerado</p>
          </div>
        </label>
        <label class="flex items-center gap-3 p-3 border-2 border-gray-200 rounded-xl cursor-pointer has-[:checked]:border-yellow-500 has-[:checked]:bg-yellow-50">
          <input type="radio" name="modulo" value="nr10" class="accent-yellow-600">
          <div>
            <p class="font-semibold text-yellow-700 text-sm">NR 10 — Painéis</p>
            <p class="text-xs text-gray-500"><?= $total_nr10 ?> com QR gerado</p>
          </div>
        </label>
      </div>
    </div>

    <!-- FILTROS DE DADOS -->
    <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
      <div>
        <label class="block text-sm font-semibold text-gray-700 mb-1">Unidade</label>
        <select name="unidade_id" class="w-full border border-gray-300 rounded-lg px-3 py-2 text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
          <option value="0">Todas as unidades</option>
          <?php foreach ($unidades as $u): ?>
            <option value="<?= $u['id'] ?>"><?= sanitizar($u['codigo']) ?> — <?= sanitizar($u['nome']) ?></option>
          <?php endforeach; ?>
        </select>
      </div>
      <div id="div_status_nr10" class="hidden">
        <label class="block text-sm font-semibold text-gray-700 mb-1">Status (NR 10)</label>
        <select name="filtro_status" class="w-full border border-gray-300 rounded-lg px-3 py-2 text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
          <option value="">Todos os status</option>
          <option value="pendente_inspecao">Pendente Inspeção</option>
          <option value="em_conformidade">Em Conformidade</option>
          <option value="nao_conforme">Não Conforme</option>
          <option value="interditado">Interditado</option>
          <option value="em_manutencao">Em Manutenção</option>
        </select>
      </div>
    </div>

    <hr class="border-gray-100">

    <!-- LAYOUT DAS ETIQUETAS -->
    <div>
      <p class="text-sm font-semibold text-gray-700 mb-3 flex items-center gap-2">
        <i data-lucide="layout-grid" class="w-4 h-4 text-gray-500"></i> Layout das Etiquetas
      </p>
      <div class="grid grid-cols-1 sm:grid-cols-3 gap-4">

        <!-- Tamanho -->
        <div>
          <label class="block text-xs font-medium text-gray-600 mb-1">Tamanho da etiqueta</label>
          <select name="tam_etiqueta" id="tam_etiqueta" class="w-full border border-gray-300 rounded-lg px-3 py-2 text-sm focus:ring-2 focus:ring-blue-500">
            <option value="pequeno">Pequeno (50×35 mm)</option>
            <option value="medio" selected>Médio (65×45 mm)</option>
            <option value="grande">Grande (90×60 mm)</option>
          </select>
        </div>

        <!-- Colunas -->
        <div>
          <label class="block text-xs font-medium text-gray-600 mb-1">Colunas por página</label>
          <select name="colunas" id="colunas" class="w-full border border-gray-300 rounded-lg px-3 py-2 text-sm focus:ring-2 focus:ring-blue-500">
            <option value="1">1 coluna</option>
            <option value="2">2 colunas</option>
            <option value="3" selected>3 colunas</option>
            <option value="4">4 colunas</option>
          </select>
        </div>

        <!-- Linhas -->
        <div>
          <label class="block text-xs font-medium text-gray-600 mb-1">Linhas por página</label>
          <select name="linhas" id="linhas" class="w-full border border-gray-300 rounded-lg px-3 py-2 text-sm focus:ring-2 focus:ring-blue-500">
            <option value="2">2 linhas</option>
            <option value="3">3 linhas</option>
            <option value="4" selected>4 linhas</option>
            <option value="5">5 linhas</option>
            <option value="6">6 linhas</option>
          </select>
        </div>
      </div>

      <!-- Preview do tamanho de página calculado -->
      <div id="preview_pagina" class="mt-3 text-xs text-gray-500 bg-gray-50 rounded-lg px-3 py-2 border border-gray-200">
        Calculando...
      </div>
    </div>

    <!-- BOTÃO GERAR -->
    <div class="flex justify-end pt-2">
      <button type="submit"
              class="inline-flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white font-semibold px-6 py-2.5 rounded-xl transition-colors shadow-sm">
        <i data-lucide="file-down" class="w-4 h-4"></i>
        Gerar PDF e Baixar
      </button>
    </div>
  </form>

  <!-- INSTRUÇÕES -->
  <div class="mt-6 bg-gray-50 border border-gray-200 rounded-xl p-4 text-sm text-gray-600 space-y-1">
    <p class="font-semibold text-gray-700 mb-2">Como usar</p>
    <p>1. Selecione o módulo (NR 12 ou NR 10) e aplique os filtros desejados.</p>
    <p>2. Escolha o tamanho da etiqueta e a grade de impressão (colunas × linhas).</p>
    <p>3. Clique em <strong>Gerar PDF e Baixar</strong> — o arquivo abrirá para impressão.</p>
    <p>4. No navegador, use <strong>Ctrl+P</strong> e selecione <em>"Tamanho real"</em> para manter as dimensões corretas.</p>
    <p class="text-xs text-gray-400 pt-1">Apenas registros com QR Code já gerado são incluídos no PDF.</p>
  </div>

</div>

<script>
// Mostrar/ocultar filtro de status conforme módulo
document.querySelectorAll('input[name="modulo"]').forEach(function(radio) {
  radio.addEventListener('change', function() {
    document.getElementById('div_status_nr10').classList.toggle('hidden', this.value !== 'nr10');
  });
});

// Preview do tamanho de página calculado
function calcularPagina() {
  var tam = document.getElementById('tam_etiqueta').value;
  var cols = parseInt(document.getElementById('colunas').value);
  var lins = parseInt(document.getElementById('linhas').value);
  var tamanhos = {
    'pequeno': {w: 50, h: 35},
    'medio':   {w: 65, h: 45},
    'grande':  {w: 90, h: 60}
  };
  var d = tamanhos[tam];
  var margem = 10, espaco = 3;
  var pw = (d.w * cols) + (espaco * (cols - 1)) + (margem * 2);
  var ph = (d.h * lins) + (espaco * (lins - 1)) + (margem * 2);
  var etiq = cols * lins;
  document.getElementById('preview_pagina').innerHTML =
    '<strong>Página gerada:</strong> ' + pw.toFixed(0) + ' × ' + ph.toFixed(0) + ' mm &nbsp;|&nbsp; ' +
    '<strong>' + etiq + ' etiquetas por página</strong>';
}
document.getElementById('tam_etiqueta').addEventListener('change', calcularPagina);
document.getElementById('colunas').addEventListener('change', calcularPagina);
document.getElementById('linhas').addEventListener('change', calcularPagina);
calcularPagina();
</script>
