<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// ============================================================
// ERP - ActSafe | Checklist Público de Painéis Elétricos NR 10
// Acesso público — técnico preenche no celular/tablet
// ============================================================
require_once '5_config/config.php';
$db = getDB();

$token     = sanitizar($_GET['token'] ?? '');
$unidade_id = intval($_GET['unidade'] ?? 0);
$acao_id    = intval($_GET['acao'] ?? 0);

// Validar token na ação
$stmt = $db->prepare("SELECT a.*, u.nome AS unidade_nome, u.codigo AS unidade_codigo
                      FROM acoes a LEFT JOIN unidades u ON u.id=a.unidade_id
                      WHERE a.id=? AND a.norma='NR10' AND a.tipo='checklist_paineis'");
$stmt->execute([$acao_id]);
$acao = $stmt->fetch();

if (!$acao || ($acao['checklist_token'] ?? '') !== $token) {
    http_response_code(404);
    die('<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Link inválido</title></head><body style="font-family:sans-serif;text-align:center;padding:60px;color:#666"><h2>Link inválido ou expirado</h2><p>Este link de checklist não é válido.</p></body></html>');
}

// Buscar inspeções pendentes desta ação/unidade
$stmt2 = $db->prepare("
    SELECT pi.*, pe.nome AS painel_nome, pe.codigo AS painel_codigo, pe.tag, pe.tipo AS painel_tipo,
           pe.nivel_tensao, pe.localizacao, pe.tensao_nominal
    FROM painel_inspecoes pi
    JOIN paineis_eletricos pe ON pe.id = pi.painel_id
    WHERE pe.unidade_id = ? AND pi.status = 'pendente'
    ORDER BY pe.nome ASC
");
$stmt2->execute([$unidade_id]);
$inspecoes = $stmt2->fetchAll();

// POST: Salvar checklist de um painel
$msg_ok = '';
$msg_err = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $insp_id    = intval($_POST['inspecao_id'] ?? 0);
    $tec_nome   = limpar($_POST['tecnico_nome'] ?? '');
    $tec_email  = limpar($_POST['tecnico_email'] ?? '');
    $obs_gerais = limpar($_POST['observacoes_gerais'] ?? '');

    if (!$insp_id || !$tec_nome) {
        $msg_err = 'Preencha seu nome antes de enviar.';
    } else {
        // Atualizar dados do técnico e observações
        $db->prepare("UPDATE painel_inspecoes SET tecnico_nome=?, tecnico_email=?, observacoes_gerais=?, data_inspecao=NOW(), status='em_progresso' WHERE id=?")
           ->execute([$tec_nome, $tec_email, $obs_gerais, $insp_id]);

        // Salvar itens do checklist
        $itens_ids = $_POST['item_id'] ?? [];
        $resultados = $_POST['resultado'] ?? [];
        $observacoes = $_POST['obs_item'] ?? [];
        foreach ($itens_ids as $idx => $item_id) {
            $res = $resultados[$idx] ?? 'na';
            $obs = limpar($observacoes[$idx] ?? '');
            $db->prepare("UPDATE painel_inspecoes_itens SET resultado=?, observacao=? WHERE id=? AND inspecao_id=?")
               ->execute([$res, $obs, intval($item_id), $insp_id]);
        }

        // Processar fotos
        $tipos_foto = ['foto_aberto' => 'aberto', 'foto_fechado' => 'fechado'];
        foreach ($tipos_foto as $campo => $tipo_foto) {
            if (!empty($_FILES[$campo]['tmp_name'])) {
                $ext = strtolower(pathinfo($_FILES[$campo]['name'], PATHINFO_EXTENSION));
                $dir = UPLOAD_DIR . 'painel_inspecoes/' . $insp_id . '/';
                if (!is_dir($dir)) mkdir($dir, 0755, true);
                $nome_arq = $tipo_foto . '_' . time() . '.jpg';
                $destino = $dir . $nome_arq;
                $src = null;
                if (in_array($ext, ['jpg','jpeg'])) $src = imagecreatefromjpeg($_FILES[$campo]['tmp_name']);
                elseif ($ext === 'png') $src = imagecreatefrompng($_FILES[$campo]['tmp_name']);
                elseif ($ext === 'webp') $src = imagecreatefromwebp($_FILES[$campo]['tmp_name']);
                if ($src) {
                    if (function_exists('exif_read_data')) {
                        $exif = @exif_read_data($_FILES[$campo]['tmp_name']);
                        $orient = $exif['Orientation'] ?? 1;
                        if ($orient == 3) $src = imagerotate($src, 180, 0);
                        elseif ($orient == 6) $src = imagerotate($src, -90, 0);
                        elseif ($orient == 8) $src = imagerotate($src, 90, 0);
                    }
                    $w = imagesx($src); $h = imagesy($src);
                    if ($w > 1280 || $h > 960) {
                        $ratio = min(1280/$w, 960/$h);
                        $nw = intval($w*$ratio); $nh = intval($h*$ratio);
                        $dst = imagecreatetruecolor($nw, $nh);
                        imagecopyresampled($dst, $src, 0,0,0,0,$nw,$nh,$w,$h);
                        imagedestroy($src); $src = $dst;
                    }
                    imagejpeg($src, $destino, 82);
                    imagedestroy($src);
                    $db->prepare("INSERT INTO painel_inspecoes_fotos (inspecao_id, arquivo, descricao, tipo) VALUES (?,?,?,?)")
                       ->execute([$insp_id, 'painel_inspecoes/' . $insp_id . '/' . $nome_arq, ucfirst($tipo_foto), $tipo_foto]);
                }
            }
        }

        // Marcar inspeção como concluída (técnico enviou = concluída)
        $db->prepare("UPDATE painel_inspecoes SET status='concluida', tecnico_nome=?, tecnico_email=?, observacoes_gerais=? WHERE id=?")
           ->execute([$tec_nome, $tec_email, $obs_gerais, $insp_id]);

        // Verificar se TODOS os painéis desta ação foram concluídos
        $s2 = $db->prepare("
            SELECT COUNT(*) FROM painel_inspecoes
            WHERE acao_id = ? AND status != 'concluida'
        ");
        $s2->execute([$acao_id]);
        $restantes = $s2->fetchColumn();

        if ($restantes == 0) {
            // ============================================================
            // Todos os painéis concluídos — gerar relatório HTML e fechar ação
            // Sem dependências externas (sem FPDF/mPDF)
            // ============================================================

            // Buscar todos os dados das inspeções desta ação
            $s3 = $db->prepare("
                SELECT pi.*, pe.nome AS painel_nome, pe.codigo AS painel_codigo,
                       pe.nivel_tensao, pe.localizacao, pe.tensao_nominal, pe.tag
                FROM painel_inspecoes pi
                JOIN paineis_eletricos pe ON pe.id = pi.painel_id
                WHERE pi.acao_id = ?
                ORDER BY pe.nome ASC
            ");
            $s3->execute([$acao_id]);
            $todas_inspecoes = $s3->fetchAll();

            $unidade_nome = $acao['unidade_nome'] ?? 'Unidade';
            $data_insp_fmt = date('d/m/Y');
            $data_hora_emissao = date('d/m/Y \à\s H:i');
            $doc_num = 'NR10-CK-' . str_pad($acao_id, 5, '0', STR_PAD_LEFT);
            $data_prox_insp = date('d/m/Y', strtotime('+6 months'));
            $data_prox_insp_db = date('Y-m-d', strtotime('+6 months'));

            // Contar não conformidades
            $total_paineis = count($todas_inspecoes);
            $nc_count = 0;
            foreach ($todas_inspecoes as $ti) {
                $sc = $db->prepare("SELECT COUNT(*) FROM painel_inspecoes_itens WHERE inspecao_id=? AND resultado='nao_conforme'");
                $sc->execute([$ti['id']]);
                $nc_count += intval($sc->fetchColumn());
            }

            // ---- Montar HTML do relatório ----
            ob_start();
            ?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo htmlspecialchars($doc_num); ?> — Relatório NR 10</title>
<style>
  *{box-sizing:border-box;margin:0;padding:0}
  body{font-family:Arial,Helvetica,sans-serif;font-size:11pt;color:#1e293b;background:#fff;padding:20px 30px}
  .page-break{page-break-before:always}
  h1{font-size:14pt;color:#0F4C81;margin-bottom:4px}
  h2{font-size:11pt;color:#0F4C81;margin:14px 0 4px;padding:4px 8px;background:#e0f2fe;border-left:4px solid #0F4C81}
  h3{font-size:10pt;color:#334155;margin:10px 0 4px;text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid #e2e8f0;padding-bottom:3px}
  .header{border-bottom:3px solid #0F4C81;padding-bottom:10px;margin-bottom:16px;display:flex;justify-content:space-between;align-items:flex-start}
  .header-left h1{font-size:16pt}
  .header-left p{font-size:9pt;color:#64748b;margin-top:2px}
  .header-right{text-align:right;font-size:8pt;color:#64748b}
  .header-right strong{color:#0F4C81;font-size:10pt}
  .info-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:16px}
  .info-box{background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;padding:8px 12px}
  .info-box label{font-size:8pt;color:#64748b;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:2px}
  .info-box strong{font-size:11pt;color:#1e293b}
  .resumo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:20px}
  .resumo-box{border-radius:8px;padding:12px;text-align:center}
  .resumo-box.azul{background:#dbeafe;border:1px solid #93c5fd}
  .resumo-box.verde{background:#dcfce7;border:1px solid #86efac}
  .resumo-box.vermelho{background:#fee2e2;border:1px solid #fca5a5}
  .resumo-box .num{font-size:22pt;font-weight:700;display:block}
  .resumo-box .leg{font-size:8pt;color:#475569;margin-top:2px}
  .painel-section{margin-bottom:20px;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}
  .painel-header{background:#0F4C81;color:#fff;padding:8px 14px}
  .painel-header h2{color:#fff;background:none;border:none;margin:0;padding:0;font-size:11pt}
  .painel-header p{font-size:8pt;opacity:.85;margin-top:2px}
  .painel-body{padding:12px 14px}
  table{width:100%;border-collapse:collapse;margin-bottom:10px;font-size:9pt}
  th{background:#f1f5f9;color:#475569;font-size:8pt;text-transform:uppercase;letter-spacing:.03em;padding:5px 8px;text-align:left;border:1px solid #e2e8f0}
  td{padding:5px 8px;border:1px solid #e2e8f0;vertical-align:top}
  tr:nth-child(even) td{background:#f8fafc}
  .badge{display:inline-block;padding:2px 8px;border-radius:12px;font-size:8pt;font-weight:700}
  .badge.conforme{background:#dcfce7;color:#15803d}
  .badge.nao_conforme{background:#fee2e2;color:#b91c1c}
  .badge.na{background:#f1f5f9;color:#64748b}
  .fotos-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}
  .foto-item img{width:100%;max-height:200px;object-fit:cover;border-radius:6px;border:1px solid #e2e8f0}
  .foto-item p{font-size:8pt;color:#64748b;text-align:center;margin-top:4px}
  .conclusao{background:#f0fdf4;border:1px solid #86efac;border-radius:8px;padding:14px;margin:20px 0}
  .conclusao.nc{background:#fff7ed;border-color:#fed7aa}
  .conclusao p{font-size:10pt;color:#166534;line-height:1.6}
  .conclusao.nc p{color:#9a3412}
  .assinaturas{display:grid;grid-template-columns:1fr 1fr;gap:40px;margin-top:30px}
  .assinatura-box{text-align:center}
  .assinatura-box .linha{border-top:1px solid #334155;margin-bottom:6px;margin-top:40px}
  .assinatura-box p{font-size:9pt;font-weight:700;color:#1e293b}
  .assinatura-box small{font-size:8pt;color:#64748b}
  .footer{margin-top:30px;padding-top:10px;border-top:1px solid #e2e8f0;font-size:8pt;color:#94a3b8;display:flex;justify-content:space-between}
  .print-btn{position:fixed;bottom:20px;right:20px;background:#0F4C81;color:#fff;border:none;border-radius:50px;padding:12px 20px;font-size:11pt;font-weight:700;cursor:pointer;box-shadow:0 4px 12px rgba(15,76,129,.4);display:flex;align-items:center;gap:8px}
  @media print{
    .print-btn{display:none!important}
    body{padding:10px 15px}
    .page-break{page-break-before:always}
  }
</style>
</head>
<body>

<button class="print-btn" onclick="window.print()">
  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 6 2 18 2 18 9"/><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><rect x="6" y="14" width="12" height="8"/></svg>
  Imprimir / Salvar PDF
</button>

<div class="header">
  <div class="header-left">
    <h1>ERP — ActSafe</h1>
    <p>Relatório Técnico de Inspeção de Painéis Elétricos — NR 10</p>
  </div>
  <div class="header-right">
    <strong><?php echo htmlspecialchars($doc_num); ?></strong><br>
    Emitido em: <?php echo $data_hora_emissao; ?>
  </div>
</div>

<div class="info-grid">
  <div class="info-box">
    <label>Unidade Fabril</label>
    <strong><?php echo htmlspecialchars($unidade_nome); ?></strong>
  </div>
  <div class="info-box">
    <label>Técnico Responsável</label>
    <strong><?php echo htmlspecialchars($tec_nome); ?></strong>
  </div>
  <div class="info-box">
    <label>Data da Inspeção</label>
    <strong><?php echo $data_insp_fmt; ?></strong>
  </div>
</div>

<div class="resumo-grid">
  <div class="resumo-box azul">
    <span class="num"><?php echo $total_paineis; ?></span>
    <div class="leg">Painéis Inspecionados</div>
  </div>
  <div class="resumo-box <?php echo $nc_count > 0 ? 'vermelho' : 'verde'; ?>">
    <span class="num"><?php echo $nc_count; ?></span>
    <div class="leg">Não Conformidades</div>
  </div>
  <div class="resumo-box verde">
    <span class="num"><?php echo $data_prox_insp; ?></span>
    <div class="leg">Próxima Inspeção</div>
  </div>
</div>

<?php foreach ($todas_inspecoes as $ti_idx => $ti):
    $sitens = $db->prepare("SELECT * FROM painel_inspecoes_itens WHERE inspecao_id=? ORDER BY ordem ASC");
    $sitens->execute([$ti['id']]);
    $itens_rel = $sitens->fetchAll();
    $grupos_rel = ['identificacao'=>'Identificação e Documentação','seguranca'=>'Segurança Elétrica e Estrutural','condicoes'=>'Condições de Uso e Ambiente'];
    $sfotos = $db->prepare("SELECT * FROM painel_inspecoes_fotos WHERE inspecao_id=? LIMIT 4");
    $sfotos->execute([$ti['id']]);
    $fotos_rel = $sfotos->fetchAll();
?>
<?php if ($ti_idx > 0 && $ti_idx % 2 === 0): ?><div class="page-break"></div><?php endif; ?>
<div class="painel-section">
  <div class="painel-header">
    <h2><?php echo htmlspecialchars($ti['painel_nome']); ?> [<?php echo htmlspecialchars($ti['painel_codigo']); ?>]</h2>
    <p>
      Tensão: <?php echo htmlspecialchars($ti['nivel_tensao']); ?>
      <?php if ($ti['tensao_nominal']): ?> — <?php echo htmlspecialchars($ti['tensao_nominal']); ?> V<?php endif; ?>
      <?php if ($ti['localizacao']): ?> — <?php echo htmlspecialchars($ti['localizacao']); ?><?php endif; ?>
      <?php if ($ti['tag']): ?> — TAG: <?php echo htmlspecialchars($ti['tag']); ?><?php endif; ?>
    </p>
  </div>
  <div class="painel-body">
    <?php foreach ($grupos_rel as $gk => $gn):
        $gitens = array_filter($itens_rel, function($i) use ($gk){ return $i['grupo'] === $gk; });
        if (empty($gitens)) continue;
    ?>
    <h3><?php echo htmlspecialchars($gn); ?></h3>
    <table>
      <thead><tr><th style="width:70%">Item</th><th style="width:15%">Resultado</th><th>Observação</th></tr></thead>
      <tbody>
      <?php foreach ($gitens as $it):
          $res = $it['resultado'] ?? 'na';
          if ($res === 'conforme') $badge = '<span class="badge conforme">Conforme</span>';
          elseif ($res === 'nao_conforme') $badge = '<span class="badge nao_conforme">Não Conforme</span>';
          else $badge = '<span class="badge na">N/A</span>';
      ?>
      <tr>
        <td><?php echo htmlspecialchars($it['item_nome']); ?></td>
        <td><?php echo $badge; ?></td>
        <td style="font-size:8pt;color:#64748b"><?php echo htmlspecialchars($it['observacao'] ?? ''); ?></td>
      </tr>
      <?php endforeach; ?>
      </tbody>
    </table>
    <?php endforeach; ?>

    <?php if ($ti['observacoes_gerais']): ?>
    <p style="font-size:9pt;color:#64748b;margin-top:6px"><strong>Obs. Gerais:</strong> <?php echo htmlspecialchars($ti['observacoes_gerais']); ?></p>
    <?php endif; ?>

    <?php if (!empty($fotos_rel)): ?>
    <div class="fotos-grid">
      <?php foreach ($fotos_rel as $fp):
          $url_foto = UPLOAD_URL . $fp['arquivo'];
      ?>
      <div class="foto-item">
        <img src="<?php echo htmlspecialchars($url_foto); ?>" alt="<?php echo htmlspecialchars($fp['tipo']); ?>">
        <p><?php echo htmlspecialchars(ucfirst($fp['tipo'])); ?></p>
      </div>
      <?php endforeach; ?>
    </div>
    <?php endif; ?>
  </div>
</div>
<?php endforeach; ?>

<div class="page-break"></div>

<div class="conclusao <?php echo $nc_count > 0 ? 'nc' : ''; ?>">
  <?php if ($nc_count > 0): ?>
  <p><strong>Conclusão:</strong> Inspeção realizada em <?php echo $data_insp_fmt; ?>. Foram identificadas <strong><?php echo $nc_count; ?> não conformidade(s)</strong>. As correções devem ser realizadas conforme plano de ação. Próxima inspeção prevista para: <strong><?php echo $data_prox_insp; ?></strong>.</p>
  <?php else: ?>
  <p><strong>Conclusão:</strong> Inspeção realizada em <?php echo $data_insp_fmt; ?>. Todos os painéis inspecionados estão em conformidade com a NR 10. Próxima inspeção prevista para: <strong><?php echo $data_prox_insp; ?></strong>.</p>
  <?php endif; ?>
</div>

<div class="assinaturas">
  <div class="assinatura-box">
    <div class="linha"></div>
    <p><?php echo htmlspecialchars($tec_nome); ?></p>
    <small>Técnico Responsável</small>
  </div>
  <div class="assinatura-box">
    <div class="linha"></div>
    <p>Gestor / Responsável</p>
    <small>Aprovação</small>
  </div>
</div>

<div class="footer">
  <span>ERP — ActSafe — Checklist NR 10 — Painéis Elétricos</span>
  <span><?php echo htmlspecialchars($doc_num); ?> — Emitido em <?php echo $data_hora_emissao; ?></span>
</div>

</body>
</html>
<?php
            $html_content = ob_get_clean();

            // Salvar arquivo HTML no servidor
            $dir_rel = UPLOAD_DIR . 'painel_relatorios/';
            if (!is_dir($dir_rel)) mkdir($dir_rel, 0755, true);
            $nome_html = 'checklist_nr10_' . $acao_id . '_' . date('Ymd_His') . '.html';
            $caminho_html = $dir_rel . $nome_html;
            file_put_contents($caminho_html, $html_content);

            // Salvar em Documentos
            $titulo_doc = 'Relatório Técnico de Inspeção de Painéis Elétricos - ' . $unidade_nome . ' - ' . date('d/m/Y');
            $db->prepare("INSERT INTO documentos (unidade_id, acao_id, categoria, nome, descricao, arquivo, mime_type, tamanho_kb, data_vencimento, criado_em)
                          VALUES (?,?,?,?,?,?,?,?,?,NOW())")
               ->execute([
                   $unidade_id,
                   $acao_id,
                   'certificado_nr10',
                   $titulo_doc,
                   'Técnico: '.$tec_nome.' | Painéis: '.$total_paineis.' | NC: '.$nc_count,
                   'painel_relatorios/'.$nome_html,
                   'text/html',
                   file_exists($caminho_html) ? intval(filesize($caminho_html)/1024) : 0,
                   $data_prox_insp_db
               ]);
            $doc_id = $db->lastInsertId();

            // Marcar ação como concluída
            $db->prepare("UPDATE acoes SET status='concluida', data_execucao=NOW(), executado_por=?, documento_id=? WHERE id=?")
               ->execute([$tec_nome, $doc_id, $acao_id]);

            // Salvar em painel_relatorios para cada inspeção
            foreach ($todas_inspecoes as $ti) {
                $db->prepare("INSERT IGNORE INTO painel_relatorios (inspecao_id, documento_id, arquivo_pdf) VALUES (?,?,?)")
                   ->execute([$ti['id'], $doc_id, 'painel_relatorios/'.$nome_html]);
            }
        }

        // Redirecionar para evitar reenvio
        header('Location: ' . $_SERVER['REQUEST_URI'] . '&enviado=' . $insp_id);
        exit;
    }
}

$enviado_id = intval($_GET['enviado'] ?? 0);

// Grupos do checklist
$grupos_label = [
    'identificacao' => 'Identificação e Documentação',
    'seguranca'     => 'Segurança Elétrica e Estrutural',
    'condicoes'     => 'Condições de Uso e Ambiente',
];
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Checklist NR 10 — <?= sanitizar($acao['unidade_nome']) ?></title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
  *{box-sizing:border-box;margin:0;padding:0}
  body{font-family:'Inter',sans-serif;background:#f1f5f9;color:#1e293b;min-height:100vh}
  .header{background:linear-gradient(135deg,#0F4C81,#1a6db5);color:#fff;padding:16px 20px}
  .header h1{font-size:1.1rem;font-weight:700}
  .header p{font-size:.8rem;opacity:.85;margin-top:2px}
  .badge-nr{display:inline-block;background:#F26419;color:#fff;font-size:.7rem;font-weight:700;padding:2px 8px;border-radius:20px;margin-top:6px}
  .container{max-width:700px;margin:0 auto;padding:16px}
  .card{background:#fff;border-radius:12px;box-shadow:0 1px 4px rgba(0,0,0,.08);margin-bottom:16px;overflow:hidden}
  .card-header{padding:14px 16px;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;gap:10px}
  .card-header h2{font-size:.95rem;font-weight:700;color:#0F4C81}
  .card-header .tag{font-size:.7rem;background:#e0f2fe;color:#0369a1;padding:2px 8px;border-radius:20px;font-weight:600}
  .card-body{padding:16px}
  .grupo-titulo{font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#64748b;margin:16px 0 8px;padding-bottom:6px;border-bottom:1px solid #e2e8f0}
  .item-row{display:flex;flex-direction:column;gap:6px;padding:10px 0;border-bottom:1px solid #f1f5f9}
  .item-row:last-child{border-bottom:none}
  .item-label{font-size:.85rem;color:#334155;font-weight:500}
  .radio-group{display:flex;gap:8px;flex-wrap:wrap}
  .radio-btn{display:flex;align-items:center;gap:5px;cursor:pointer}
  .radio-btn input{display:none}
  .radio-btn span{padding:5px 12px;border-radius:20px;font-size:.78rem;font-weight:600;border:2px solid #e2e8f0;color:#64748b;transition:all .15s}
  .radio-btn input:checked + span.conforme{background:#dcfce7;border-color:#16a34a;color:#15803d}
  .radio-btn input:checked + span.nao_conforme{background:#fee2e2;border-color:#dc2626;color:#b91c1c}
  .radio-btn input:checked + span.na{background:#f1f5f9;border-color:#94a3b8;color:#475569}
  .obs-field{display:none;margin-top:6px}
  .obs-field.show{display:block}
  .obs-field textarea{width:100%;border:1px solid #fca5a5;border-radius:8px;padding:8px 10px;font-size:.82rem;color:#334155;resize:none;background:#fff5f5}
  .form-input{width:100%;border:1px solid #e2e8f0;border-radius:8px;padding:10px 12px;font-size:.85rem;color:#334155;background:#fff;margin-top:4px}
  .foto-slot{border:2px dashed #bfdbfe;border-radius:10px;padding:14px;text-align:center;cursor:pointer;position:relative;overflow:hidden}
  .foto-slot input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}
  .foto-slot p{font-size:.8rem;color:#3b82f6;font-weight:600;margin-top:4px}
  .foto-slot small{font-size:.72rem;color:#94a3b8}
  .foto-preview{width:100%;max-height:180px;object-fit:cover;border-radius:8px;margin-top:8px;display:none}
  .btn-enviar{width:100%;background:#0F4C81;color:#fff;border:none;border-radius:10px;padding:14px;font-size:.95rem;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;margin-top:16px}
  .btn-enviar:active{transform:scale(.98)}
  .alert-ok{background:#dcfce7;border:1px solid #86efac;color:#166534;padding:12px 16px;border-radius:10px;font-size:.85rem;font-weight:600;margin-bottom:12px;display:flex;align-items:center;gap:8px}
  .alert-err{background:#fee2e2;border:1px solid #fca5a5;color:#991b1b;padding:12px 16px;border-radius:10px;font-size:.85rem;margin-bottom:12px}
  .painel-concluido{background:#f0fdf4;border:1px solid #86efac;border-radius:10px;padding:14px;text-align:center;color:#166534;font-size:.85rem;font-weight:600}
  .progress-bar{height:6px;background:#e2e8f0;border-radius:3px;margin-top:8px}
  .progress-fill{height:6px;border-radius:3px;background:#16a34a;transition:width .3s}
  .nivel-badge{font-size:.7rem;font-weight:700;padding:2px 7px;border-radius:4px}
  .nivel-BT{background:#dbeafe;color:#1d4ed8}
  .nivel-MT{background:#ffedd5;color:#c2410c}
  .nivel-AT{background:#fee2e2;color:#b91c1c}
  .info-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;font-size:.78rem;color:#64748b;margin-top:4px}
  .info-grid span{display:flex;flex-direction:column}
  .info-grid strong{color:#334155;font-size:.82rem}
  .tecnico-box{background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:14px;margin-bottom:16px}
  .tecnico-box label{font-size:.8rem;font-weight:600;color:#475569;display:block;margin-bottom:4px}
  .sem-paineis{text-align:center;padding:40px 20px;color:#94a3b8}
  .sem-paineis h3{font-size:1rem;margin-top:8px;color:#64748b}
  @media(min-width:480px){.radio-group{flex-wrap:nowrap}}
</style>
</head>
<body>

<div class="header">
  <h1>ERP — ActSafe</h1>
  <p>Checklist de Inspeção de Painéis Elétricos</p>
  <span class="badge-nr">NR 10</span>
</div>

<div class="container">

  <!-- Cabeçalho da unidade -->
  <div class="card">
    <div class="card-body">
      <p style="font-size:.75rem;color:#64748b;font-weight:600;text-transform:uppercase;letter-spacing:.05em">Unidade</p>
      <p style="font-size:1.1rem;font-weight:700;color:#0F4C81;margin-top:2px"><?= sanitizar($acao['unidade_nome']) ?></p>
      <p style="font-size:.8rem;color:#64748b;margin-top:4px">
        Data: <strong><?= date('d/m/Y') ?></strong> &nbsp;|&nbsp;
        <?= count($inspecoes) ?> painel(is) para inspecionar
      </p>
    </div>
  </div>

  <?php if ($msg_err): ?>
  <div class="alert-err"><?= sanitizar($msg_err) ?></div>
  <?php endif; ?>

  <?php if (empty($inspecoes)): ?>
  <div class="sem-paineis">
    <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>
    <h3>Todos os checklists já foram preenchidos!</h3>
    <p style="font-size:.8rem;margin-top:4px">Obrigado pela inspeção.</p>
  </div>
  <?php else: ?>

  <!-- Dados do técnico (preenchido uma vez, aplicado a todos) -->
  <div class="tecnico-box">
    <p style="font-size:.85rem;font-weight:700;color:#334155;margin-bottom:10px">📋 Dados do Técnico Responsável</p>
    <label>Nome completo *</label>
    <input type="text" id="tec_nome_global" class="form-input" placeholder="Seu nome completo" required>
    <label style="margin-top:8px">E-mail / WhatsApp</label>
    <input type="text" id="tec_email_global" class="form-input" placeholder="email@empresa.com ou (11) 99999-9999">
  </div>

  <?php foreach ($inspecoes as $idx => $insp):
    // Buscar itens do checklist desta inspeção
    $stmt_itens = $db->prepare("SELECT * FROM painel_inspecoes_itens WHERE inspecao_id=? ORDER BY ordem ASC");
    $stmt_itens->execute([$insp['id']]);
    $itens = $stmt_itens->fetchAll();
    // Agrupar por grupo
    $por_grupo = [];
    foreach ($itens as $it) $por_grupo[$it['grupo']][] = $it;
    // Contar respondidos
    $respondidos = count(array_filter($itens, function($i){ return $i['resultado'] !== 'na'; }));
    $total = count($itens);
    $pct = $total > 0 ? round($respondidos / $total * 100) : 0;
    $ja_concluido = ($insp['status'] === 'concluida');
    $foi_enviado = ($enviado_id === $insp['id']);
  ?>
  <div class="card" id="painel-<?= $insp['id'] ?>">
    <div class="card-header">
      <div style="flex:1">
        <h2><?= sanitizar($insp['painel_nome']) ?></h2>
        <div style="display:flex;gap:6px;align-items:center;margin-top:4px;flex-wrap:wrap">
          <span class="tag"><?= sanitizar($insp['painel_codigo']) ?></span>
          <?php if ($insp['tag']): ?><span class="tag">TAG: <?= sanitizar($insp['tag']) ?></span><?php endif; ?>
          <span class="nivel-badge nivel-<?= $insp['nivel_tensao'] ?>"><?= $insp['nivel_tensao'] ?></span>
        </div>
        <?php if ($insp['localizacao']): ?>
        <p style="font-size:.75rem;color:#94a3b8;margin-top:4px">📍 <?= sanitizar($insp['localizacao']) ?></p>
        <?php endif; ?>
      </div>
    </div>
    <div class="card-body">

      <?php if ($foi_enviado): ?>
      <div class="alert-ok">✅ Checklist enviado com sucesso! Obrigado.</div>
      <?php elseif ($ja_concluido): ?>
      <div class="painel-concluido">✅ Este painel já foi inspecionado.</div>
      <?php else: ?>

      <div class="progress-bar">
        <div class="progress-fill" id="prog-<?= $insp['id'] ?>" style="width:<?= $pct ?>%"></div>
      </div>
      <p style="font-size:.72rem;color:#94a3b8;margin-top:4px;text-align:right"><?= $respondidos ?>/<?= $total ?> itens respondidos</p>

      <form method="POST" action="<?= htmlspecialchars($_SERVER['REQUEST_URI']) ?>" enctype="multipart/form-data" id="form-<?= $insp['id'] ?>">
        <input type="hidden" name="inspecao_id" value="<?= $insp['id'] ?>">
        <input type="hidden" name="tecnico_nome" id="hidden_nome_<?= $insp['id'] ?>">
        <input type="hidden" name="tecnico_email" id="hidden_email_<?= $insp['id'] ?>">

        <?php foreach ($grupos_label as $grupo_key => $grupo_nome):
          if (empty($por_grupo[$grupo_key])) continue; ?>
        <p class="grupo-titulo"><?= $grupo_nome ?></p>
        <?php foreach ($por_grupo[$grupo_key] as $item): ?>
        <div class="item-row">
          <input type="hidden" name="item_id[]" value="<?= $item['id'] ?>">
          <p class="item-label"><?= sanitizar($item['item_nome']) ?></p>
          <div class="radio-group">
            <label class="radio-btn">
              <input type="radio" name="resultado[<?= $item['id'] ?>]" value="conforme"
                     onchange="toggleObs(this, <?= $item['id'] ?>); atualizarProgresso(<?= $insp['id'] ?>, <?= $total ?>)"
                     <?= $item['resultado']==='conforme' ? 'checked' : '' ?>>
              <span class="conforme">✔ Conforme</span>
            </label>
            <label class="radio-btn">
              <input type="radio" name="resultado[<?= $item['id'] ?>]" value="nao_conforme"
                     onchange="toggleObs(this, <?= $item['id'] ?>); atualizarProgresso(<?= $insp['id'] ?>, <?= $total ?>)"
                     <?= $item['resultado']==='nao_conforme' ? 'checked' : '' ?>>
              <span class="nao_conforme">✘ Não Conforme</span>
            </label>
            <label class="radio-btn">
              <input type="radio" name="resultado[<?= $item['id'] ?>]" value="na"
                     onchange="toggleObs(this, <?= $item['id'] ?>); atualizarProgresso(<?= $insp['id'] ?>, <?= $total ?>)"
                     <?= ($item['resultado']==='na' || !$item['resultado']) ? 'checked' : '' ?>>
              <span class="na">N/A</span>
            </label>
          </div>
          <div class="obs-field <?= $item['resultado']==='nao_conforme' ? 'show' : '' ?>" id="obs-<?= $item['id'] ?>">
            <textarea name="obs_item[<?= $item['id'] ?>]" rows="2" placeholder="Descreva a não conformidade..."><?= sanitizar($item['observacao'] ?? '') ?></textarea>
          </div>
        </div>
        <?php endforeach; ?>
        <?php endforeach; ?>

        <!-- Observações gerais -->
        <p class="grupo-titulo">Observações Gerais</p>
        <textarea name="observacoes_gerais" class="form-input" rows="3" placeholder="Observações adicionais sobre este painel..."><?= sanitizar($insp['observacoes_gerais'] ?? '') ?></textarea>

        <!-- Fotos -->
        <p class="grupo-titulo">Fotos do Painel</p>
        <div style="display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:8px">
          <div>
            <div class="foto-slot" onclick="document.getElementById('foto_aberto_<?= $insp['id'] ?>').click()">
              <input type="file" name="foto_aberto" id="foto_aberto_<?= $insp['id'] ?>" accept="image/*" capture="environment"
                     onchange="previewFoto(this, 'prev_aberto_<?= $insp['id'] ?>')">
              <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#3b82f6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin:0 auto"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/><circle cx="12" cy="13" r="4"/></svg>
              <p>Painel Aberto</p>
              <small>Câmera traseira</small>
              <img id="prev_aberto_<?= $insp['id'] ?>" class="foto-preview" src="" alt="preview">
            </div>
          </div>
          <div>
            <div class="foto-slot" onclick="document.getElementById('foto_fechado_<?= $insp['id'] ?>').click()">
              <input type="file" name="foto_fechado" id="foto_fechado_<?= $insp['id'] ?>" accept="image/*" capture="environment"
                     onchange="previewFoto(this, 'prev_fechado_<?= $insp['id'] ?>')">
              <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#3b82f6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin:0 auto"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/><circle cx="12" cy="13" r="4"/></svg>
              <p>Painel Fechado</p>
              <small>Câmera traseira</small>
              <img id="prev_fechado_<?= $insp['id'] ?>" class="foto-preview" src="" alt="preview">
            </div>
          </div>
        </div>

        <button type="submit" class="btn-enviar" onclick="preencherTecnico(<?= $insp['id'] ?>)">
          <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
          Enviar Checklist deste Painel
        </button>
      </form>
      <?php endif; ?>
    </div>
  </div>
  <?php endforeach; ?>

  <?php endif; ?>

  <p style="text-align:center;font-size:.72rem;color:#94a3b8;padding:16px 0">
    ERP — ActSafe &copy; <?= date('Y') ?> &nbsp;|&nbsp; NR 10 — Segurança em Instalações Elétricas
  </p>
</div>

<script>
function toggleObs(radio, itemId) {
  const obs = document.getElementById('obs-' + itemId);
  if (obs) obs.classList.toggle('show', radio.value === 'nao_conforme');
}
function previewFoto(input, previewId) {
  const prev = document.getElementById(previewId);
  if (input.files && input.files[0]) {
    const reader = new FileReader();
    reader.onload = e => { prev.src = e.target.result; prev.style.display = 'block'; };
    reader.readAsDataURL(input.files[0]);
  }
}
function preencherTecnico(inspId) {
  const nome = document.getElementById('tec_nome_global').value.trim();
  const email = document.getElementById('tec_email_global').value.trim();
  document.getElementById('hidden_nome_' + inspId).value = nome;
  document.getElementById('hidden_email_' + inspId).value = email;
  if (!nome) {
    alert('Preencha seu nome antes de enviar!');
    document.getElementById('tec_nome_global').focus();
    return false;
  }
  return true;
}
function atualizarProgresso(inspId, total) {
  const form = document.getElementById('form-' + inspId);
  if (!form) return;
  const radios = form.querySelectorAll('input[type="radio"]:checked');
  let respondidos = 0;
  radios.forEach(r => { if (r.value !== 'na') respondidos++; });
  const pct = total > 0 ? Math.round(respondidos / total * 100) : 0;
  const bar = document.getElementById('prog-' + inspId);
  if (bar) bar.style.width = pct + '%';
}
// Inicializar obs visíveis para itens já marcados como não conforme
document.querySelectorAll('input[type="radio"][value="nao_conforme"]:checked').forEach(r => {
  const match = r.name.match(/resultado\[(\d+)\]/);
  if (match) {
    const obs = document.getElementById('obs-' + match[1]);
    if (obs) obs.classList.add('show');
  }
});
</script>
</body>
</html>
