// ------------------- FUNCIONES GLOBALES -------------------

let loadCandidates;
let currentPage = 1;

function agendarEntrevista(id, estadoActual) {
  const estadoNormalizado = estadoActual.toLowerCase().trim();
  if (estadoNormalizado.includes('llamada')) {
    const nuevoEstatus = 'entrevista1';

    fetch('../../backend/recruiter/actualizar_estatus.php', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        aspirante_id: id,
        estatus: nuevoEstatus,
        comentario: 'Cambio automático desde botón Agendar'
      })
    })
    .then(r => r.json())
    .then(data => {
      if (data.success) {
        alert('Estatus actualizado a entrevista programada 1');
        loadCandidates(currentPage);
      } else {
        alert('Error: ' + data.message);
      }
    })
    .catch(err => {
      console.error('Error al actualizar estatus:', err);
      alert('Error de red al cambiar estatus');
    });
  } else {
    alert('Solo puedes agendar si el aspirante está en estatus de llamada.');
  }
}

function rechazarCandidato(id) {
  if (!confirm('¿Estás seguro de rechazar este aspirante? Esta acción no se puede deshacer.')) return;

  fetch('../../backend/recruiter/actualizar_estatus.php', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      aspirante_id: id,
      estatus: 'rechazado',
      comentario: 'Rechazado desde vista de candidatos'
    })
  })
  .then(r => r.json())
  .then(data => {
    if (data.success) {
      alert('Aspirante rechazado correctamente.');
      loadCandidates(currentPage);
    } else {
      alert('Error: ' + data.message);
    }
  })
  .catch(err => {
    console.error('Error al rechazar aspirante:', err);
    alert('Error de red al rechazar.');
  });
}

// ------------------- INICIALIZADOR -------------------

document.addEventListener('DOMContentLoaded', () => {
  const filtroBusqueda = document.getElementById('filtro-busqueda');
  const filtroEstado = document.getElementById('filtro-estado');
  const filtroLimite = document.getElementById('selectLimit');
  const btnFiltrar = document.getElementById('btn-filtrar');
  const btnLimpiar = document.getElementById('btn-limpiar');
  const btnBuscar = document.getElementById('btn-buscar');
  const tbody = document.getElementById('candidatos-tbody');
  const countLabel = document.getElementById('candidatos-count');
  const paginador = document.getElementById('pagination');

  btnFiltrar?.addEventListener('click', () => loadCandidates(1));
  btnBuscar?.addEventListener('click', () => loadCandidates(1));
  filtroBusqueda?.addEventListener('keypress', e => {
    if (e.key === 'Enter') loadCandidates(1);
  });
  btnLimpiar?.addEventListener('click', () => {
    filtroBusqueda.value = '';
    filtroEstado.selectedIndex = 0;
    filtroLimite.value = 10;
    loadCandidates(1);
  });

  filtroLimite?.addEventListener('change', () => {
    currentPage = 1;
    loadCandidates(currentPage);
  });

  loadCandidates = function (page = 1) {
      currentPage = page;

      const busqueda = filtroBusqueda.value.trim();
      const estado = filtroEstado.value;
      const limit = parseInt(filtroLimite.value) || 10;

      const params = new URLSearchParams();
      if (busqueda) params.append('busqueda', busqueda);
      if (estado && estado !== 'Todos') params.append('estado', estado);

      fetch(`../../backend/recruiter/get_candidates.php?${params.toString()}`)
        .then(r => r.json())
        .then(data => {
          if (!data.success) return;

          tbody.innerHTML = '';
          countLabel.textContent = data.total;

            function getEstadoColor(estado) {
            switch (estado.toLowerCase()) {
              case 'asignado': return 'primary';
              case 'revisión': return 'warning';
              case 'llamada':
              case 'llamada 1':
              case 'llamada 2': return 'info';
              case 'entrevista':
              case 'entrevista programada 1':
              case 'entrevista programada 2':
              case 'reprogramada': return 'info';
              case 'prueba': return 'secondary';
              case 'visita a domicilio': return 'dark';
              case 'referencias': return 'success';
              case 'contratado': return 'success';
              case 'en_pre_alta': return 'info';
              case 'en_plantilla': return 'success';
              case 'proceso_concluido': return 'dark';
              case 'rechazado': return 'danger';
              case 'activo': return 'success';
              default: return 'secondary';
            }
          }


          function crearFila(c, color = null) {
            const tr = document.createElement('tr');
            if (color === 'rojo') tr.classList.add('table-danger');
            if (color === 'verde') tr.classList.add('table-success');

            tr.innerHTML = `
              <td>
                <div class="d-flex align-items-center">
                  <i class="fas fa-user-circle fa-2x me-3 text-primary"></i>
                  <div>
                    <h6 class="mb-0">
                      <span class="text-primary fw-semibold">${c.folio}</span><br>
                      ${c.nombre_completo}
                    </h6>
                    <small class="text-muted">${c.ciudad || 'Ubicación no disponible'}</small>
                  </div>
                </div>
              </td>
              <td>${c.puesto}</td>
              <td>
                <span class="badge bg-${getEstadoColor(c.estado)} bg-opacity-10 text-${getEstadoColor(c.estado)}">
                  ${c.estado}
                </span>
              </td>
              <td>
                <button class="btn btn-sm btn-outline-primary me-1" title="Ver perfil"
                  onclick="location.href='candidate-detail.php?id=${c.id}'">
                  <i class="fas fa-eye"></i>
                </button>
                <button class="btn btn-sm btn-outline-success me-1" title="Agendar"
                  onclick="agendarEntrevista(${c.id}, '${c.estado}')">
                  <i class="fas fa-calendar-plus"></i>
                </button>
                ${c.estado.toLowerCase().trim() !== 'rechazado' ? `
                <button class="btn btn-sm btn-outline-danger" title="Rechazar"
                  onclick="rechazarCandidato(${c.id})">
                  <i class="fas fa-times"></i>
                </button>` : ''}
              </td>
            `;
            tbody.appendChild(tr);
          }

          // Clasificar y ordenar
          const enProceso = [];
          const contratados = [];
          const rechazados = [];

          data.data.forEach(c => {
            const estado = c.estado.toLowerCase().trim();
            if (estado === 'rechazado') {
              rechazados.push(c);
            } else if (['contratado', 'en_pre_alta', 'en_plantilla', 'proceso_concluido'].includes(estado)) {
              contratados.push(c);
            } else {
              enProceso.push(c);
            }
          });


          // Unir en un solo arreglo ordenado
          const candidatosOrdenados = [...enProceso, ...contratados, ...rechazados];

          // Paginar en frontend
          const totalPages = Math.ceil(candidatosOrdenados.length / limit);
          const inicio = (currentPage - 1) * limit;
          const fin = inicio + limit;
          const candidatosPagina = candidatosOrdenados.slice(inicio, fin);

          // Pintar candidatos por tipo
          candidatosPagina.forEach(c => {
            const estado = c.estado.toLowerCase().trim();
            if (estado === 'rechazado') {
              crearFila(c, 'rojo');
            } else if (estado === 'contratado') {
              crearFila(c, 'verde');
            } else {
              crearFila(c);
            }
          });

          // ------------------ Paginación visual ------------------
          paginador.innerHTML = '';
          const maxVisible = 7;
          let start = Math.max(1, currentPage - Math.floor(maxVisible / 2));
          let end = start + maxVisible - 1;
          if (end > totalPages) {
            end = totalPages;
            start = Math.max(1, end - maxVisible + 1);
          }

          if (currentPage > 1) {
            const btnPrev = document.createElement('button');
            btnPrev.className = 'btn btn-sm btn-outline-primary me-1';
            btnPrev.innerHTML = '‹';
            btnPrev.addEventListener('click', () => loadCandidates(currentPage - 1));
            paginador.appendChild(btnPrev);
          }

          for (let i = start; i <= end; i++) {
            const btn = document.createElement('button');
            btn.className = `btn btn-sm ${i === currentPage ? 'btn-primary' : 'btn-outline-primary'} me-1`;
            btn.textContent = i;
            btn.addEventListener('click', () => loadCandidates(i));
            paginador.appendChild(btn);
          }

          if (currentPage < totalPages) {
            const btnNext = document.createElement('button');
            btnNext.className = 'btn btn-sm btn-outline-primary';
            btnNext.innerHTML = '›';
            btnNext.addEventListener('click', () => loadCandidates(currentPage + 1));
            paginador.appendChild(btnNext);
          }
        })
        .catch(err => console.error('Error al cargar candidatos:', err));
    };

  loadCandidates(); // Carga inicial

  const btnExportarExcelContainer = document.getElementById('btn-exportar-excel');
const btnExportarExcel = btnExportarExcelContainer?.querySelector('button');

// Mostrar/ocultar botón según filtro de estado
if (filtroEstado && btnExportarExcelContainer) {
  filtroEstado.addEventListener('change', () => {
    const valor = filtroEstado.value.toLowerCase().trim();
    if (valor === 'rechazado' || valor === 'rechazados') {
      btnExportarExcelContainer.style.display = 'block';
    } else {
      btnExportarExcelContainer.style.display = 'none';
    } 
  });
}

// Acción al hacer clic en el botón
if (btnExportarExcel) {
  btnExportarExcel.addEventListener('click', () => {
    window.location.href = '../../backend/recruiter/exportar_rechazados_excel.php';
  });
}

} );
