/* ============================================================
   Sistema de Arriendos — JS común
   ============================================================ */

/* Sidebar móvil */
document.addEventListener('DOMContentLoaded', () => {
  const btn = document.getElementById('btnSidebar');
  const sidebar = document.getElementById('sidebar');
  const backdrop = document.getElementById('sidebarBackdrop');
  if (btn && sidebar) {
    btn.addEventListener('click', () => {
      sidebar.classList.toggle('abierta');
      backdrop.classList.toggle('visible');
    });
    backdrop.addEventListener('click', () => {
      sidebar.classList.remove('abierta');
      backdrop.classList.remove('visible');
    });
  }
});

/* ---------- RUT chileno ---------- */
function limpiarRut(rut) {
  return (rut || '').replace(/[^0-9kK]/g, '').toUpperCase();
}

function validarRut(rut) {
  const limpio = limpiarRut(rut);
  if (limpio.length < 8) return null; // podría ser pasaporte: no validamos
  const dv = limpio.slice(-1);
  const num = limpio.slice(0, -1);
  if (!/^\d+$/.test(num)) return null;
  let suma = 0, factor = 2;
  for (let i = num.length - 1; i >= 0; i--) {
    suma += parseInt(num[i], 10) * factor;
    factor = factor === 7 ? 2 : factor + 1;
  }
  const resto = 11 - (suma % 11);
  const esperado = resto === 11 ? '0' : (resto === 10 ? 'K' : String(resto));
  return dv === esperado;
}

function formatearRut(rut) {
  const limpio = limpiarRut(rut);
  if (limpio.length < 2) return rut;
  return limpio.slice(0, -1) + '-' + limpio.slice(-1);
}

/* Marca visualmente un input de RUT según validez (null = formato no chileno, no marca) */
function marcarRut(input) {
  const valido = validarRut(input.value);
  input.classList.remove('is-valid', 'is-invalid');
  if (input.value.trim() === '' || valido === null) return;
  input.classList.add(valido ? 'is-valid' : 'is-invalid');
}

/* Confirmación bonita para enlaces/formularios destructivos */
function confirmarAccion(mensaje, formOEnlace) {
  Swal.fire({
    title: '¿Estás seguro?',
    text: mensaje,
    icon: 'warning',
    showCancelButton: true,
    confirmButtonColor: '#e11d48',
    cancelButtonColor: '#64748b',
    confirmButtonText: 'Sí, continuar',
    cancelButtonText: 'Cancelar'
  }).then(r => {
    if (r.isConfirmed) {
      if (typeof formOEnlace === 'string') {
        window.location.href = formOEnlace;
      } else {
        formOEnlace.submit();
      }
    }
  });
  return false;
}

/* Toast de éxito/error */
function avisar(icono, titulo) {
  Swal.fire({
    toast: true, position: 'top-end', icon: icono, title: titulo,
    showConfirmButton: false, timer: 3000, timerProgressBar: true
  });
}

/* DataTable con opciones en español (sin depender del CDN de i18n) */
const DT_ES = {
  processing: 'Procesando...',
  search: 'Buscar:',
  lengthMenu: 'Mostrar _MENU_ registros',
  info: 'Mostrando _START_ a _END_ de _TOTAL_ registros',
  infoEmpty: 'Sin registros',
  infoFiltered: '(filtrado de _MAX_ registros)',
  loadingRecords: 'Cargando...',
  zeroRecords: 'No se encontraron resultados',
  emptyTable: 'Sin datos disponibles',
  paginate: { first: 'Primero', previous: 'Anterior', next: 'Siguiente', last: 'Último' }
};
