<?php
require_once(dirname(__DIR__) . '/config/db.php');
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

$titulo = "Integrações de Realizado";
$icone = "bi-arrow-left-right";

$filtro = $_GET['status'] ?? 'ativas';
$order = $_GET['order'] ?? 'cdintegracao';
$dir = strtolower($_GET['dir'] ?? 'asc');
$dir = $dir === 'desc' ? 'desc' : 'asc';
$nextDir = $dir === 'asc' ? 'desc' : 'asc';
$limit = (int)($_GET['limit'] ?? 100);
$page = (int)($_GET['page'] ?? 1);
$offset = ($page - 1) * $limit;
$busca = trim($_GET['busca'] ?? '');

$where = [];
$params = [];
if ($filtro === 'ativas') $where[] = "flativo = true";
elseif ($filtro === 'inativas') $where[] = "flativo = false";
if ($busca) {
    $where[] = "(dsintegracao ILIKE :busca OR host ILIKE :busca OR dbname ILIKE :busca)";
    $params[':busca'] = "%$busca%";
}
$whereSql = $where ? "WHERE " . implode(" AND ", $where) : "";
$limitSql = ($limit === -1) ? "" : "LIMIT $limit OFFSET $offset";

$sql = "SELECT cdintegracao, dsintegracao, flativo, tipo_banco, host, porta, dbname, schema_banco,
               schedule_cron, schedule_ativo, ultima_sincronizacao, sql_origem
        FROM back.integracao
        $whereSql
        ORDER BY $order $dir
        $limitSql";

$stmt = $pdo->prepare($sql);
foreach ($params as $k => $v) $stmt->bindValue($k, $v);
$stmt->execute();
$integracoes = $stmt->fetchAll(PDO::FETCH_ASSOC);

$sqlCount = "SELECT COUNT(*) FROM back.integracao $whereSql";
$stmtCount = $pdo->prepare($sqlCount);
foreach ($params as $k => $v) $stmtCount->bindValue($k, $v);
$stmtCount->execute();
$total = $stmtCount->fetchColumn();

$tipos_banco = ['pgsql' => 'PostgreSQL', 'mysql' => 'MySQL', 'sqlsrv' => 'SQL Server'];
$empresas = $pdo->query("SELECT cdempresa, dsempresa, dsapelido FROM back.empresa WHERE flativo = 0 ORDER BY dsempresa")->fetchAll(PDO::FETCH_ASSOC);

function iconeSeta($campo, $order, $dir) {
    if ($campo !== $order) return '';
  return $dir === 'asc' ? '▲' : '▼';
}
?>

<h4 class="mb-3"><i class="bi <?= $icone ?>"></i> <?= $titulo ?></h4>
<hr>

<div class="d-flex justify-content-between align-items-center mb-3 flex-wrap gap-2">
  <div class="btn-group btn-group-sm">
    <a href="?m=integracoes&status=ativas" class="btn btn-outline-success <?= $filtro=='ativas'?'active':'' ?>">Ativas</a>
    <a href="?m=integracoes&status=inativas" class="btn btn-outline-secondary <?= $filtro=='inativas'?'active':'' ?>">Inativas</a>
    <a href="?m=integracoes&status=todas" class="btn btn-outline-dark <?= $filtro=='todas'?'active':'' ?>">Todas</a>
  </div>

  <form method="get" class="d-flex align-items-center gap-2 flex-grow-1 justify-content-center" style="max-width:420px;">
    <input type="hidden" name="m" value="integracoes">
    <input type="hidden" name="status" value="<?= $filtro ?>">
    <div class="input-group input-group-sm w-100">
      <input type="text" name="busca" class="form-control" placeholder="Pesquisar por nome ou host" value="<?= htmlspecialchars($busca) ?>">
      <button class="btn btn-outline-primary" type="submit"><i class="bi bi-search"></i></button>
    </div>
  </form>

  <button class="btn btn-outline-primary btn-sm" data-bs-toggle="modal" data-bs-target="#modalIntegracao" id="novaIntegracaoBtn">
      <i class="bi bi-plus-circle"></i> Nova Integração
  </button>
</div>

<div class="card border-0 shadow-sm">
  <div class="table-responsive">
    <table class="table table-striped table-hover table-sm align-middle mb-0">
      <thead class="table-dark">
        <tr>
          <th><a href="?m=integracoes&order=cdintegracao&dir=<?= $nextDir ?>&status=<?= $filtro ?>" class="text-white text-decoration-none">ID <?= iconeSeta('cdintegracao', $order, $dir) ?></a></th>
          <th><a href="?m=integracoes&order=dsintegracao&dir=<?= $nextDir ?>&status=<?= $filtro ?>" class="text-white text-decoration-none">Descrição <?= iconeSeta('dsintegracao', $order, $dir) ?></a></th>
          <th>Banco/Host</th>
          <th>Empresas</th>
          <th>Schedule</th>
          <th>Status</th>
          <th class="text-end">Ações</th>
        </tr>
      </thead>
      <tbody>
        <?php if (empty($integracoes)): ?>
          <tr><td colspan="7" class="text-center py-4 text-muted">Nenhuma integração encontrada</td></tr>
        <?php else: ?>
          <?php foreach ($integracoes as $int): 
            $stmtEmps = $pdo->prepare("SELECT e.dsapelido FROM back.integracao_empresa ie JOIN back.empresa e ON e.cdempresa = ie.cdempresa WHERE ie.cdintegracao = :id");
            $stmtEmps->execute([':id' => $int['cdintegracao']]);
            $emps = $stmtEmps->fetchAll(PDO::FETCH_COLUMN);
          ?>
            <tr>
              <td><strong><?= $int['cdintegracao'] ?></strong></td>
              <td><?= htmlspecialchars($int['dsintegracao']) ?></td>
              <td>
                <span class="badge bg-secondary"><?= $tipos_banco[$int['tipo_banco']] ?? $int['tipo_banco'] ?></span>
                <br><small class="text-muted"><?= htmlspecialchars($int['host']) ?><?= $int['porta'] ? ":{$int['porta']}" : '' ?></small>
              </td>
              <td>
                <?php if (count($emps) > 0): ?>
                  <small class="text-muted"><?= implode(', ', array_map('htmlspecialchars', $emps)) ?></small>
                <?php else: ?>
                  <small class="text-muted">-</small>
                <?php endif; ?>
              </td>
              <td>
                <?php
                  $autoAtivo = !empty($int['schedule_ativo']);
                  $minHoras = (int)($int['schedule_cron'] ?? 0);
                  if ($autoAtivo && $minHoras <= 0) $minHoras = 24;
                ?>
                <?php if ($autoAtivo && $minHoras > 0): ?>
                  <span class="badge bg-success"><i class="bi bi-clock-fill"></i> Auto (mín. <?= (int)$minHoras ?>h)</span>
                  <?php if (!empty($int['ultima_sincronizacao'])): ?>
                    <br><small class="text-muted">Última: <?= date('d/m H:i', strtotime($int['ultima_sincronizacao'])) ?></small>
                  <?php endif; ?>
                <?php else: ?>
                  <small class="text-muted">Manual</small>
                <?php endif; ?>
              </td>
              <td>
                <?php if ($int['flativo']): ?>
                  <span class="badge bg-success">Ativa</span>
                <?php else: ?>
                  <span class="badge bg-secondary">Inativa</span>
                <?php endif; ?>
              </td>
              <td class="text-end">
                <button class="btn btn-sm btn-outline-primary edit-btn" data-id="<?= $int['cdintegracao'] ?>" data-bs-toggle="modal" data-bs-target="#modalIntegracao">
                  <i class="bi bi-pencil-square"></i>
                </button>
                <button class="btn btn-sm btn-outline-info test-btn" data-id="<?= $int['cdintegracao'] ?>" title="Testar conexão">
                  <i class="bi bi-plug"></i>
                </button>
                <button class="btn btn-sm btn-outline-danger delete-btn" data-id="<?= $int['cdintegracao'] ?>" title="Excluir">
                  <i class="bi bi-trash"></i>
                </button>
              </td>
            </tr>
          <?php endforeach; ?>
        <?php endif; ?>
      </tbody>
    </table>
  </div>
</div>

<div class="modal fade" id="modalIntegracao" tabindex="-1">
  <div class="modal-dialog modal-lg modal-dialog-scrollable">
    <div class="modal-content">
      <div class="modal-header bg-primary text-white py-3">
        <h5 class="modal-title"><i class="bi bi-arrow-left-right"></i> Integração de Realizado</h5>
        <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
      </div>
      <div class="modal-body p-3">
        <form id="formIntegracao">
          <input type="hidden" id="cdintegracao" value="">
          <div class="row g-2">
            <div class="col-md-7">
              <label class="fw-bold">Nome da Integração *</label>
              <input type="text" id="dsintegracao" class="form-control" placeholder="Ex: Realizado ERP X">
            </div>
            <div class="col-md-3">
              <label class="fw-bold">Status</label>
              <div class="form-check form-switch mt-2">
                <input type="checkbox" id="flativo" class="form-check-input" checked>
                <label class="form-check-label" for="flativo">Ativa</label>
              </div>
            </div>
            <div class="col-md-2">
              <label class="fw-bold">Porta *</label>
              <input type="number" id="porta" class="form-control" value="5432">
            </div>

            <div class="col-md-4">
              <label class="fw-bold">Tipo de Banco *</label>
              <select id="tipo_banco" class="form-select">
                <option value="">Selecione...</option>
                <?php foreach ($tipos_banco as $k => $v): ?>
                  <option value="<?= $k ?>"><?= $v ?></option>
                <?php endforeach; ?>
              </select>
            </div>
            <div class="col-md-5">
              <label class="fw-bold">Host/IP *</label>
              <input type="text" id="host" class="form-control" placeholder="localhost ou 192.168.x.x">
            </div>
            <div class="col-md-3">
              <label class="fw-bold">Schema</label>
              <input type="text" id="schema_banco" class="form-control" value="public">
            </div>

            <div class="col-md-5">
              <label class="fw-bold">Database *</label>
              <input type="text" id="dbname" class="form-control" placeholder="nome_banco">
            </div>
            <div class="col-md-4">
              <label class="fw-bold">Usuário *</label>
              <input type="text" id="usuario" class="form-control">
            </div>
            <div class="col-md-3">
              <label class="fw-bold">Senha <span id="senhaObrigatorio">*</span></label>
              <input type="password" id="senha" class="form-control">
              <small class="text-success fw-bold" id="senhaHint" style="display:none;">Deixe em branco para manter</small>
            </div>

            <div class="col-12">
              <label class="fw-bold">SQL de Origem *</label>
              <textarea id="sql_origem" class="form-control font-monospace" rows="7" placeholder="SELECT cdorigem, cdempresa, cdcentrocusto, cdplanocontabil, dtmovimento, tpmovimento, valor, dscomplemento FROM ..."></textarea>
              <div class="alert alert-light border border-warning mt-2 mb-2 p-2">
                <small class="text-muted">
                  <strong>Campos obrigatórios:</strong> cdorigem (código de origem do lançamento no ERP, gravado em back.realizado.cdorigem), cdempresa (Codigo Serial entre Helm X ERP), cdcentrocusto, cdplanocontabil, dtmovimento (auto-resolve ano/mês), tpmovimento (D/C), valor, dscomplemento
                </small>
              </div>
              <button type="button" class="btn btn-sm btn-outline-info" id="btnVerificarDados"><i class="bi bi-eye"></i> Verificar dados</button>
              <div id="sqlErroOrigem" class="text-danger small mt-1" style="display:none;"></div>
            </div>

            <div class="col-12" id="verificarDadosSection"></div>

            <div class="col-12">
              <label class="fw-bold small d-block mb-1">Empresas vinculadas</label>
              <div id="empresasContainer" class="border rounded p-2" style="max-height:120px; overflow-y:auto; background:#f8f9fa;">
                <?php foreach ($empresas as $emp): ?>
                  <div class="form-check form-check-inline me-2">
                    <input type="checkbox" class="form-check-input empresa-checkbox" id="emp_<?= $emp['cdempresa'] ?>" value="<?= $emp['cdempresa'] ?>">
                    <label class="form-check-label small" for="emp_<?= $emp['cdempresa'] ?>"><?= htmlspecialchars($emp['dsapelido']) ?></label>
                  </div>
                <?php endforeach; ?>
              </div>
            </div>

            <div class="col-12">
              <div class="card border-primary border-1">
                <div class="card-header bg-primary text-white py-2 d-flex justify-content-between align-items-center">
                  <small><i class="bi bi-clock"></i> <strong>Horários Agendados</strong></small>
                  <button type="button" class="btn btn-sm btn-light" id="btnAdicionarHorario" title="Adicionar novo horário">
                    <i class="bi bi-plus-circle"></i>
                  </button>
                </div>
                <div class="card-body p-2">
                  <small class="text-muted d-block mb-2">
                    <i class="bi bi-info-circle"></i> Configure múltiplos horários para sincronização automática (ex: 08:00, 14:00, 20:00)
                  </small>
                  <div id="horariosContainer">
                    <div class="alert alert-light border border-dashed text-center text-muted py-2" style="font-size:0.9rem;">
                      Nenhum horário configurado. Clique em <strong>+</strong> para adicionar.
                    </div>
                  </div>
                </div>
              </div>
            </div>

            <div class="col-12" id="testeResultadoInline"></div>
          </div>
        </form>
      </div>
      <div class="modal-footer py-2 d-flex justify-content-between align-items-center gap-2">
        <button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Fechar</button>
        <div class="d-flex gap-2">
          <button type="button" class="btn btn-sm btn-outline-info" id="btnTestarConexaoInline"><i class="bi bi-plug"></i> Testar</button>
          <button type="button" class="btn btn-primary" id="btnSalvarIntegracao"><i class="bi bi-check-lg"></i> Salvar</button>
        </div>
      </div>
    </div>
  </div>
</div>

<div class="modal fade" id="modalTesteConexao" tabindex="-1">
  <div class="modal-dialog modal-md modal-dialog-centered">
    <div class="modal-content">
      <div class="modal-header bg-info text-white py-2">
        <h6 class="modal-title"><i class="bi bi-plug"></i> Teste de Conexão</h6>
        <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
      </div>
      <div class="modal-body"><div id="testeResultado">Testando...</div></div>
      <div class="modal-footer py-2">
        <button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="modal">Fechar</button>
      </div>
    </div>
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>

<script>
const modalIntegracao = new bootstrap.Modal(document.getElementById('modalIntegracao'));
const modalTesteConexao = new bootstrap.Modal(document.getElementById('modalTesteConexao'));

function validarSQLOrigem(sql) {
  if (!sql) return false;
  const sqlTrim = sql.trim();
  if (!sqlTrim) return false;
  if (sqlTrim.includes(';')) return false;
  if (!/^\s*(SELECT|WITH)\b/i.test(sqlTrim)) return false;
  const bloqueados = ['INSERT','UPDATE','DELETE','MERGE','TRUNCATE','DROP','ALTER','CREATE','GRANT','REVOKE','COMMENT','EXEC','EXECUTE','CALL'];
  for (const cmd of bloqueados) {
    if (new RegExp('\\b' + cmd + '\\b', 'i').test(sqlTrim)) return false;
  }
  return true;
}

$('#sql_origem').on('input', function() {
  const sql = $(this).val();
  const erro = $('#sqlErroOrigem');
  if (!validarSQLOrigem(sql)) {
    erro.html('❌ <strong>SQL inválido:</strong> Apenas SELECT são aceitos. Instruções INSERT, UPDATE, DELETE, DROP, ALTER são bloqueadas por segurança.').show();
    $(this).addClass('is-invalid');
  } else {
    erro.hide();
    $(this).removeClass('is-invalid');
  }
});

function resetForm() {
  $('#formIntegracao')[0].reset();
  $('#cdintegracao').val('');
  $('#schema_banco').val('public');
  $('#flativo').prop('checked', true);
  $('#testeResultadoInline').html('');
  $('.empresa-checkbox').prop('checked', false);
  $('#senhaObrigatorio').show();
  $('#senhaHint').hide();
  $('#horariosContainer').html('<div class="alert alert-light border border-dashed text-center text-muted py-2" style="font-size:0.9rem;">Nenhum horário configurado. Clique em <strong>+</strong> para adicionar.</div>');
}

// Armazena horários temporários durante edição
let horariosTemp = [];

function renderizarHorarios() {
  const container = $('#horariosContainer');
  
  if (horariosTemp.length === 0) {
    container.html('<div class="alert alert-light border border-dashed text-center text-muted py-2" style="font-size:0.9rem;">Nenhum horário configurado. Clique em <strong>+</strong> para adicionar.</div>');
    return;
  }
  
  let html = '<div class="row g-2">';
  horariosTemp.forEach((horario, idx) => {
    const hora = String(horario.hora).padStart(2, '0');
    const minuto = String(horario.minuto).padStart(2, '0');
    const statusClass = horario.flativo ? 'bg-success' : 'bg-secondary';
    html += `
      <div class="col-md-3">
        <div class="card border-${horario.flativo ? 'success' : 'secondary'} h-100">
          <div class="card-body p-2 text-center">
            <div class="fw-bold" style="font-size:1.5rem;">${hora}:${minuto}</div>
            <div class="form-check form-check-inline mt-1 mb-2">
              <input type="checkbox" class="form-check-input" id="hor_ativo_${idx}" 
                ${horario.flativo ? 'checked' : ''} 
                onchange="horariosTemp[${idx}].flativo = this.checked; renderizarHorarios();">
              <label class="form-check-label small" for="hor_ativo_${idx}">Ativo</label>
            </div>
            <button type="button" class="btn btn-sm btn-outline-danger w-100" onclick="removerHorario(${idx})">
              <i class="bi bi-trash"></i> Remover
            </button>
          </div>
        </div>
      </div>
    `;
  });
  html += '</div>';
  container.html(html);
}

function removerHorario(idx) {
  horariosTemp.splice(idx, 1);
  renderizarHorarios();
}

$('#btnAdicionarHorario').on('click', () => {
  // Abre um pequeno modal para inserir hora/minuto
  const hora = prompt('Digite a hora (0-23):', '08');
  if (hora === null) return;
  const horaParse = parseInt(hora, 10);
  if (isNaN(horaParse) || horaParse < 0 || horaParse > 23) {
    alert('Hora inválida (0-23)');
    return;
  }
  
  const minuto = prompt('Digite o minuto (0-59):', '00');
  if (minuto === null) return;
  const minutoParse = parseInt(minuto, 10);
  if (isNaN(minutoParse) || minutoParse < 0 || minutoParse > 59) {
    alert('Minuto inválido (0-59)');
    return;
  }
  
  // Verifica duplicatas
  const existe = horariosTemp.some(h => h.hora === horaParse && h.minuto === minutoParse);
  if (existe) {
    alert(`Horário ${String(horaParse).padStart(2, '0')}:${String(minutoParse).padStart(2, '0')} já existe`);
    return;
  }
  
  horariosTemp.push({ 
    cdhorario: null, 
    hora: horaParse, 
    minuto: minutoParse, 
    flativo: true 
  });
  renderizarHorarios();
});

$('#novaIntegracaoBtn').on('click', () => {
  resetForm();
  horariosTemp = [];
});

$(document).on('click', '.edit-btn', async function() {
  resetForm();
  const id = $(this).data('id');
  console.log('Buscando integração ID:', id);
  
  try {
    const response = await fetch(`?m=integracoes_actions&ajax=obter&cdintegracao=${id}`);
    const text = await response.text();
    console.log('Resposta raw:', text);
    
    let resp;
    try {
      resp = JSON.parse(text);
    } catch(e) {
      alert('Erro no servidor. Verifique o console para detalhes.');
      console.error('Resposta não é JSON:', text);
      return;
    }
    
    console.log('Resposta do servidor:', resp);
    
    if (!resp.ok) { 
      alert(resp.msg); 
      return; 
    }
    
    const d = resp.data;
    console.log('Dados recebidos:', d);
    
    $('#cdintegracao').val(d.cdintegracao);
    $('#dsintegracao').val(d.dsintegracao);
    $('#flativo').prop('checked', !!d.flativo);
    $('#tipo_banco').val(d.tipo_banco);
    $('#host').val(d.host);
    $('#porta').val(d.porta || 5432);
    $('#schema_banco').val(d.schema_banco || 'public');
    $('#dbname').val(d.dbname);
    $('#usuario').val(d.usuario);
    $('#sql_origem').val(d.sql_origem || '');
    $('.empresa-checkbox').prop('checked', false);
    (d.empresas || []).forEach(cd => $(`#emp_${cd}`).prop('checked', true));
    $('#senha').val('');
    $('#senhaObrigatorio').hide();
    $('#senhaHint').show();
    
    // Carregar horários agendados
    horariosTemp = d.horarios || [];
    renderizarHorarios();
    
    console.log('Campos preenchidos com sucesso');
  } catch(e) {
    console.error('Erro ao carregar integração:', e);
    alert('Erro ao carregar dados: ' + e.message);
  }
});

$('#btnSalvarIntegracao').on('click', async () => {
  const id = $('#cdintegracao').val();
  const dados = {
    dsintegracao: $('#dsintegracao').val(),
    flativo: $('#flativo').is(':checked') ? 1 : 0,
    tipo_banco: $('#tipo_banco').val(),
    host: $('#host').val(),
    porta: $('#porta').val(),
    schema_banco: $('#schema_banco').val(),
    dbname: $('#dbname').val(),
    usuario: $('#usuario').val(),
    senha: $('#senha').val(),
    sql_origem: $('#sql_origem').val(),
    empresas: $('.empresa-checkbox:checked').map(function() { return $(this).val(); }).get(),
    horarios: horariosTemp.map(h => ({ hora: h.hora, minuto: h.minuto, flativo: h.flativo }))
  };

  const obrig = [dados.dsintegracao, dados.tipo_banco, dados.host, dados.porta, dados.dbname, dados.usuario, dados.sql_origem];
  if (obrig.some(v => !v)) { alert('Preencha os campos obrigatórios'); return; }
  if (!id && !dados.senha) { alert('Senha é obrigatória na criação'); return; }
  if (!validarSQLOrigem(dados.sql_origem)) { alert('❌ SQL inválido: Apenas SELECT/CTE são aceitos.\nProibido: INSERT, UPDATE, DELETE, DROP, ALTER, etc.'); return; }

  const url = id ? `?m=integracoes_actions&ajax=editar&cdintegracao=${id}` : '?m=integracoes_actions&ajax=criar';
  const resp = await fetch(url, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(dados)
  }).then(r => r.json());

  alert(resp.msg);
  if (resp.ok) {
    modalIntegracao.hide();
    setTimeout(() => location.reload(), 300);
  }
});

$('#btnVerificarDados').on('click', async () => {
  const id = $('#cdintegracao').val();
  const sql = $('#sql_origem').val();
  
  if (!id) {
    alert('Salve a integração primeiro');
    return;
  }
  
  if (!sql) {
    alert('Preencha o SQL de origem');
    return;
  }
  
  $('#verificarDadosSection').html('<div class="alert alert-info py-2 small"><i class="bi bi-hourglass-split"></i> Carregando última linha...</div>');
  
  const resp = await fetch(`?m=integracoes_actions&ajax=verificar_dados&cdintegracao=${id}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ sql_origem: sql })
  }).then(r => r.json());
  
  if (resp.ok) {
    let html = '<div class="card border-info mt-2"><div class="card-header bg-info text-white py-2 small"><i class="bi bi-table"></i> Último registro da origem</div><div class="card-body p-2">';
    
    if (resp.data && Object.keys(resp.data).length > 0) {
      html += '<table class="table table-sm table-bordered mb-0"><tbody>';
      for (const [chave, valor] of Object.entries(resp.data)) {
        const displayVal = valor === null ? '<em class="text-muted">NULL</em>' : (typeof valor === 'object' ? JSON.stringify(valor) : String(valor).substring(0, 100));
        html += `<tr><td class="fw-bold small" style="width:200px;">${chave}</td><td class="small">${displayVal}</td></tr>`;
      }
      html += '</tbody></table>';
    } else {
      html += '<div class="text-muted small">Nenhum registro encontrado</div>';
    }
    
    html += '</div></div>';
    $('#verificarDadosSection').html(html);
  } else {
    $('#verificarDadosSection').html(`<div class="alert alert-danger py-2 small"><i class="bi bi-x-circle"></i> ${resp.msg}</div>`);
  }
});

$('#btnTestarConexaoInline').on('click', async () => {
  const dados = {
    tipo_banco: $('#tipo_banco').val(),
    host: $('#host').val(),
    porta: $('#porta').val(),
    dbname: $('#dbname').val(),
    usuario: $('#usuario').val(),
    senha: $('#senha').val()
  };

  if (!dados.tipo_banco || !dados.host || !dados.dbname || !dados.usuario) {
    $('#testeResultadoInline').html('<div class="alert alert-warning py-1 small">Preencha os dados de conexão</div>');
    return;
  }

  $('#testeResultadoInline').html('<div class="alert alert-info py-1 small"><i class="bi bi-hourglass-split"></i> Testando...</div>');
  const resp = await fetch('?m=integracoes_actions&ajax=testar_temp', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(dados)
  }).then(r => r.json());

  if (resp.ok) {
    $('#testeResultadoInline').html(`<div class="alert alert-success py-1 small"><i class="bi bi-check-circle"></i> ${resp.msg}</div>`);
  } else {
    $('#testeResultadoInline').html(`<div class="alert alert-danger py-1 small"><i class="bi bi-x-circle"></i> ${resp.msg}</div>`);
  }
});

$(document).on('click', '.test-btn', async function() {
  const id = $(this).data('id');
  modalTesteConexao.show();
  $('#testeResultado').html('<div class="text-center"><i class="bi bi-hourglass-split"></i> Testando...</div>');
  const resp = await fetch(`?m=integracoes_actions&ajax=testar&cdintegracao=${id}`).then(r => r.json());
  if (resp.ok) {
    $('#testeResultado').html(`<div class="alert alert-success mb-0"><i class="bi bi-check-circle"></i> ${resp.msg}</div>`);
  } else {
    $('#testeResultado').html(`<div class="alert alert-danger mb-0"><i class="bi bi-x-circle"></i> ${resp.msg}</div>`);
  }
});

$(document).on('click', '.delete-btn', async function() {
  if (!confirm('Excluir esta integração?')) return;
  const id = $(this).data('id');
  const resp = await fetch(`?m=integracoes_actions&ajax=deletar&cdintegracao=${id}`, { method: 'POST' }).then(r => r.json());
  alert(resp.msg);
  if (resp.ok) setTimeout(() => location.reload(), 300);
});

// O controle de "mínimo de horas" é salvo diretamente (0 = manual)
</script>
