// ../../Modelo/Archivos_JS/Gestion_Usuarios.js
$(function () {
  const URL_CAMBIAR = '../../Controlador/Ctrl_Administrador/MySQL_Cambiar_Estado_Usuario.php';

  /* ===== util ===== */
  function hoyISO() {
    const d = new Date();
    return `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`;
  }
  function openModal($m) {
    if ($.fn.modal) $m.modal('show');
    else if (window.bootstrap) new bootstrap.Modal($m[0]).show();
  }
  function closeModal($m) {
    if ($.fn.modal) $m.modal('hide');
    else if (window.bootstrap) bootstrap.Modal.getInstance($m[0])?.hide();
  }

  /* ====== CAMBIO DE ESTADO (igual que antes, abre y guarda) ====== */
  const $modal      = $('#modalEstadoUsuario');
  const $idUsuario  = $('#estado_id_usuario');
  const $estado     = $('#nuevo_estado');
  const $motivoWrap = $('#motivo_container');
  const $motivo     = $('#motivo_estado');
  const $grpCambio  = $('#grp_fecha_cambio');
  const $grpRegreso = $('#grp_fecha_regreso');
  const $fCambio    = $('#fecha_cambio');
  const $fRegreso   = $('#fecha_regreso');

  function toggleCampos() {
    const esActivo = ($estado.val() || '').toLowerCase() === 'activo';
    $motivoWrap.toggle(!esActivo);

    if ($grpCambio.length && $grpRegreso.length) {
      $grpRegreso.toggle(esActivo);
      $grpCambio.toggle(!esActivo);

      if ($fRegreso.length) $fRegreso.prop('required', esActivo);
      if ($fCambio.length)  $fCambio.prop('required', !esActivo);

      const hoy = hoyISO();
      if (esActivo) {
        if ($fRegreso.length && !$fRegreso.val()) $fRegreso.val(hoy);
        if ($fCambio.length) $fCambio.val('');
        $motivo.val('');
      } else {
        if ($fCambio.length && !$fCambio.val()) $fCambio.val(hoy);
        if ($fRegreso.length) $fRegreso.val('');
      }
      if ($fCambio.length)  $fCambio.attr('max', hoy);
      if ($fRegreso.length) $fRegreso.attr('max', hoy);
    }
  }
  $estado.on('change', toggleCampos);

  $(document).on('click', '.cambiar-estado-usuario', function (e) {
    e.preventDefault();

    if (window.hasOwnProperty('puedeEstadoUsuarios') && !window.puedeEstadoUsuarios) {
      Swal.fire('Permisos', 'No tiene permiso para cambiar estados.', 'warning');
      return;
    }

    const id           = $(this).data('id');
    const estadoActual = (String($(this).data('estado') || 'activo')).toLowerCase();
    const motivoActual = String($(this).attr('data-motivo') || $(this).data('motivo') || '');
    const desde        = String($(this).attr('data-fecha-desde') || $(this).data('fecha-desde') || '');

    $idUsuario.val(id);
    $estado.val(estadoActual);
    $motivo.val(motivoActual);

    if ($fCambio.length)  $fCambio.val(desde || '');
    if ($fRegreso.length) $fRegreso.val('');

    toggleCampos();
    openModal($modal);
  });

  $('#btnGuardarEstado').on('click', function () {
    const id_usuario   = parseInt($idUsuario.val(), 10);
    const estado       = ($estado.val() || '').toLowerCase();
    const motivo       = ($motivo.val() || '').trim();
    const fecha_cambio  = $fCambio.length  ? $fCambio.val()  : '';
    const fecha_regreso = $fRegreso.length ? $fRegreso.val() : '';

    if (!id_usuario) { Swal.fire('Atención', 'Usuario no identificado.', 'warning'); return; }
    if (estado !== 'activo' && !motivo) { Swal.fire('Atención', 'Debe ingresar el motivo.', 'warning'); return; }

    if ($grpCambio.length && $grpRegreso.length) {
      if (estado === 'activo' && !fecha_regreso) { Swal.fire('Atención', 'Indique la fecha de regreso.', 'warning'); return; }
      if (estado !== 'activo' && !fecha_cambio)  { Swal.fire('Atención', 'Indique la fecha de cambio.', 'warning'); return; }

      const $badge = $(`.cambiar-estado-usuario[data-id='${id_usuario}']`).first();
      const desdeActual = String($badge.attr('data-fecha-desde') || $badge.data('fecha-desde') || '');
      if (estado === 'activo' && fecha_regreso && desdeActual && fecha_regreso < desdeActual) {
        Swal.fire('Atención', `La fecha de regreso (${fecha_regreso}) no puede ser anterior a ${desdeActual}.`, 'warning');
        return;
      }
    }

    const payload = { id_usuario, estado, motivo };
    if ($fCambio.length)  payload.fecha_cambio  = fecha_cambio;
    if ($fRegreso.length) payload.fecha_regreso = fecha_regreso;

    $.ajax({
      url: URL_CAMBIAR,
      type: 'POST',
      dataType: 'json',
      data: payload
    }).done(function (r) {
      if (!r || r.success !== true) { Swal.fire('Error', r?.message || 'No se pudo actualizar.', 'error'); return; }

      const mapBadge = { activo:'bg-success', inactivo:'bg-secondary', suspendido:'bg-warning', bloqueado:'bg-danger' };
      const mapText  = { activo:'Activ@', inactivo:'Inactiv@', suspendido:'Suspendid@', bloqueado:'Bloquead@' };

      const badgeClass = mapBadge[estado] || 'bg-dark';
      const texto      = mapText[estado] || estado;
      const nuevoDesde = (estado === 'activo') ? (fecha_regreso || '') : (fecha_cambio || '');

      $(`.cambiar-estado-usuario[data-id='${id_usuario}']`).each(function () {
        $(this)
          .removeClass()
          .addClass(`badge ${badgeClass} cambiar-estado-usuario`)
          .text(texto)
          .attr('title', nuevoDesde ? ('Desde: ' + nuevoDesde) : '')
          .attr('data-motivo', motivo || '')
          .attr('data-fecha-desde', nuevoDesde || '')
          .data('estado', estado)
          .data('motivo', motivo || '')
          .data('fecha-desde', nuevoDesde || '');
      });

      Swal.fire({ icon:'success', title:'¡Éxito!', text:r.message || 'Estado actualizado.', timer:1600, showConfirmButton:false });
      closeModal($modal);
    }).fail(function (xhr) {
      const msg = (xhr.responseJSON && (xhr.responseJSON.message || xhr.responseJSON.msg)) || 'Error al conectar con el servidor.';
      Swal.fire('Error', msg, 'error');
    });
  });

  $modal.on('keypress', function (e) { if (e.key === 'Enter') { e.preventDefault(); $('#btnGuardarEstado').click(); } });

  /* ====== ELIMINAR POR AJAX ====== */
  $(document).on('click', '.btn-delete', function (e) {
    e.preventDefault();
    if (!window.puedeEliminar) return;

    const href = $(this).attr('href'); // .../MySQL_Borrar_Usuario.php?id=XX
    const $row = $(this).closest('tr'); // en tabla
    Swal.fire({
      icon: 'warning',
      title: '¿Eliminar usuario?',
      text: 'Esta acción no se puede deshacer.',
      showCancelButton: true,
      confirmButtonText: 'Sí, eliminar',
      cancelButtonText: 'Cancelar'
    }).then((res) => {
      if (!res.isConfirmed) return;

      // llamamos por POST con ajax=1 para obtener JSON y manejar FK/errores
      $.ajax({
        url: href,
        method: 'POST',
        dataType: 'json',
        data: { ajax: 1 }
      }).done(function (r) {
        if (!r || r.success !== true) {
          Swal.fire('Error', (r && (r.message || r.msg)) || 'No se pudo eliminar.', 'error');
          return;
        }
        // borrar visualmente
        if ($row.length) {
          $row.fadeOut(200, function(){ $(this).remove(); });
        } else {
          // si estamos en tarjetas, recarga rápida
          location.reload();
        }
        Swal.fire({ icon:'success', title:'Eliminado', text:r.message || 'Usuario eliminado.', timer:1500, showConfirmButton:false });
      }).fail(function (xhr) {
        const msg = (xhr.responseJSON && (xhr.responseJSON.message || xhr.responseJSON.msg)) || 'Error al conectar con el servidor.';
        Swal.fire('Error', msg, 'error');
      });
    });
  });
});
