var tabla;
function init() {
    $("#formulario").on("submit", function(e) {
        guardar(e);
    });
    listar();
}
function guardar(e) {
    e.preventDefault();

    const rutVal = $("#fic_run").val().replace(/\./g, '').replace(/-/g, '');
    if (!validarRut(rutVal)) {
        Swal.fire("Error!", "El RUT ingresado no es válido", "error");
        return;
    }

    const esAlumno = $("#emp_ext").is(":checked");
    const valorCheckbox = esAlumno ? 1 : 0; // 👈 Aquí lo conviertes en 1 o 0

    let valorAlumno = $("#valor_alumno").val();
    valorAlumno = valorAlumno.replace(/\./g, '').replace(/,/g, '');
    valorAlumno = esAlumno ? parseFloat(valorAlumno) || 0 : 0;

    if (esAlumno && (isNaN(valorAlumno) || valorAlumno <= 0)) {
        Swal.fire("Error!", "Ingrese un valor válido para el alumno", "error");
        return;
    }

    $("#valor_alumno").val(valorAlumno);
console.log(valorCheckbox);
    var formData = new FormData($("#formulario")[0]);
    formData.append('emp_ext', valorCheckbox);

    $.ajax({
        url: "../../controller/fichas.php?op=guardaryeditar",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        dataType: 'json',
        success: function(response) {
            if (response.success) {
                $("#formulario")[0].reset();
                $('#modalmantenimiento').modal('hide');
                $('#fichas_data').DataTable().ajax.reload();
                Swal.fire("Éxito!", "Ficha guardada correctamente", "success");
            } else {
                Swal.fire("Error!", response.msg || "No se pudo guardar la ficha", "error");
            }
        },
        error: function() {
            Swal.fire("Error!", "Error al procesar la solicitud", "error");
        }
    });
}


function listar() {

 tabla=$('#fichas_data').dataTable({
       "aProcessing": true,
       "aServerSide": true,
        "dom": '<"top"f>rt<"bottom"lip><"clear">',
       "searching": true,
       "columnDefs": [
        {
            "targets": 0,  // Ã­ndice de la columna que quieres ocultar (ej: la primera columna que es ID)
            "visible": false,
            "searchable": false
        }
                     ],
       lengthChange: false,
       colReorder: true,
       "ajax":{
           url: '../../controller/fichas.php?op=listar',
           type : "post",
           dataType : "json",
           error: function(e){
              console.log(e.responseText);	
           }
       },
       "bDestroy": true,
       "responsive": true,
       "bInfo":true,
       "iDisplayLength": 10,
       "autoWidth": false,
       "language": {
           "sProcessing":     "Procesando...",
           "sLengthMenu":     "Mostrar _MENU_ registros",
           "sZeroRecords":    "No se encontraron resultados",
           "sEmptyTable":     "NingÃºn dato disponible en esta tabla",
           "sInfo":           "Mostrando un total de _TOTAL_ registros",
           "sInfoEmpty":      "Mostrando un total de 0 registros",
           "sInfoFiltered":   "(filtrado de un total de _MAX_ registros)",
           "sInfoPostFix":    "",
           "sSearch":         "Buscar:",
           "sUrl":            "",
           "sInfoThousands":  ",",
           "sLoadingRecords": "Cargando...",
           "oPaginate": {
               "sFirst":    "Primero",
               "sLast":     "Ãšltimo",
               "sNext":     "Siguiente",
               "sPrevious": "Anterior"
           },
           "oAria": {
               "sSortAscending":  ": Activar para ordenar la columna de manera ascendente",
               "sSortDescending": ": Activar para ordenar la columna de manera descendente"
           }
       }
   })
   $('#fichas_data_wrapper .top').prepend(`
    <button type="button" id="btnnuevo" onclick="abrirModal()" class="btn btn-primary me-2">
        <i class="fas fa-plus"></i> Nuevo Registro
    </button>
    `);




}

function editar(fic_id) {
    cargarSelectApoderados();
    $.post("../../controller/fichas.php?op=mostrar", { fic_id: fic_id }, function(data) {
       
        data = JSON.parse(data);
        $("#fic_id").val(data.fic_id);
        $("#fic_run").val(data.fic_run);
        $("#fic_nom").val(data.fic_nom);
        $("#fic_fec_naci").val(data.fic_fec_naci);
        $("#apo1_id").val(data.apo1_id);
        $("#apo2_id").val(data.apo2_id);
        $("#fic_dato1").val(data.fic_dato1);
        $("#fic_dato2").val(data.fic_dato2);
        $("#fic_dato3").val(data.fic_dato3);
        $("#fic_dato4").val(data.fic_dato4);
        $("#valor_alumno").val(  
          new Intl.NumberFormat("es-CL").format(data.fic_valor_mes)
        );
        // Mostrar el input si el valor es mayor a 0
        if (parseFloat(data.fic_valor_mes) > 0) {
            $("#emp_ext").prop("checked", true); // activa el switch
            $("#valor_alumno_container").slideDown(); // muestra el input
        } else {
            $("#emp_ext").prop("checked", false); // apaga el switch
            $("#valor_alumno_container").slideUp(); // oculta el input
            $("#valor_alumno").val(""); // limpia el valor
        }

        $("#modalmantenimiento").modal("show");
    });
}


function eliminar(fic_id) {
    swal({
        title: "Â¿Eliminar ficha?",
        text: "No podrÃ¡s deshacer esta acciÃ³n.",
        icon: "warning",
        buttons: true,
        dangerMode: true
    }).then((willDelete) => {
        if (willDelete) {
            $.post("../../controller/fichas.php?op=eliminar", { fic_id: fic_id }, function(data) {
                $('#fichas_data').DataTable().ajax.reload();
                swal("Eliminado correctamente", { icon: "success" });
            });
        }
    });
}

function abrirModal() {
  // Limpiar campos
  $("#formulario")[0].reset();
  $("#fic_id").val(""); // importante si vas a usar para editar tambiÃ©n
  $("#modalmantenimiento").modal("show");
}

function cargarSelectApoderados() {
    $.ajax({
        url: "../../controller/apoderados.php?op=select_apoderados",
        type: "GET",
        dataType: "json",
        success: function (data) {
            let options = `<option value="">Seleccione...</option>`;
            data.forEach(function (apo) {
                options += `<option value="${apo.apo_id}">${apo.apo_nombre}</option>`;
            });
            $("#apo1_id").html(options);
            $("#apo2_id").html(options);
        }
    });
    $.ajax({
        url: "../../controller/precios.php?op=select_apoderados",
        type: "GET",
        dataType: "json",
        success: function (data) {
            let options = `<option value="">Seleccione...</option>`;
            data.forEach(function (pre) {
                options += `<option value="${pre.pre_id}">${pre.pre_costo}</option>`;
            });
            $("#fic_id").html(options);
        }
    });
}

// Llamar cuando abras el modal
function abrirModal() {
    $("#formulario")[0].reset();
    $("#fic_id").val("");
    cargarSelectApoderados(); // importante
    $("#modalmantenimiento").modal("show");
}

$(document).ready(function() {
    init();
    $("#fic_run").on("input", function() {
    let val = $(this).val().replace(/[^0-9kK]/g, '');
    $(this).val(formatearRut(val));

    if (validarRut(val)) {
        $(this).removeClass("is-invalid").addClass("is-valid");
    } else {
        $(this).removeClass("is-valid").addClass("is-invalid");
    }
    
     
    });
    $("#emp_ext").on("change", function () {
        if ($(this).is(":checked")) {
          $("#valor_alumno_container").slideDown();
        } else {
          $("#valor_alumno_container").slideUp();
          $("#valor_alumno").val(""); // limpia el valor si se desactiva
        }
      });
    $("#valor_alumno").on("input", function() {
      // Eliminar todo lo que no sea número
      let valor = $(this).val().replace(/\D/g, "");
    
      // Si hay valor, formatearlo con separadores de miles estilo Chile
      if (valor) {
        valor = new Intl.NumberFormat("es-CL").format(valor);
      }
    
      // Mostrar el valor formateado en el input
      $(this).val(valor);
    });

});
function validarRut(rut) {
    rut = rut.replace(/\./g, '').replace('-', '');
    if (rut.length < 8) return false;

    let cuerpo = rut.slice(0, -1);
    let dv = rut.slice(-1).toUpperCase();

    let suma = 0;
    let multiplo = 2;

    for (let i = cuerpo.length - 1; i >= 0; i--) {
        suma += parseInt(cuerpo.charAt(i)) * multiplo;
        multiplo = multiplo < 7 ? multiplo + 1 : 2;
    }

    let dvEsperado = 11 - (suma % 11);
    dvEsperado = dvEsperado === 11 ? '0' : dvEsperado === 10 ? 'K' : dvEsperado.toString();

    return dv === dvEsperado;
}

function formatearRut(rut) {
    rut = rut.replace(/\./g, '').replace(/-/g, '');
    if (rut.length <= 1) return rut;

    let cuerpo = rut.slice(0, -1);
    let dv = rut.slice(-1);

    cuerpo = cuerpo.replace(/\B(?=(\d{3})+(?!\d))/g, ".");
    return `${cuerpo}-${dv}`;
}

document.addEventListener("DOMContentLoaded", function () {
    const rutInput = document.getElementById("fic_run");

    rutInput.addEventListener("input", function () {
        const limpio = rutInput.value.replace(/[^\dkK]/gi, '').toUpperCase();

        if (limpio.length > 1) {
            const cuerpo = limpio.slice(0, -1);
            const dv = limpio.slice(-1);
            rutInput.value = formatearRUT(cuerpo + dv);

            // Validar en tiempo real
            if (validarRUT(rutInput.value)) {
                rutInput.classList.add("is-valid");
                rutInput.classList.remove("is-invalid");
            } else {
                rutInput.classList.add("is-invalid");
                rutInput.classList.remove("is-valid");
            }
        } else {
            // Si estÃ¡ vacÃ­o o incompleto, quitamos clases
            rutInput.classList.remove("is-valid", "is-invalid");
        }
    });

    rutInput.addEventListener("blur", function () {
        const rut = rutInput.value;

        if (rut && !validarRUT(rut)) {
            rutInput.classList.add("is-invalid");
            rutInput.classList.remove("is-valid");
        } else if (rut) {
            rutInput.classList.add("is-valid");
            rutInput.classList.remove("is-invalid");
        }
    });

    function formatearRUT(rutCompleto) {
        let rut = rutCompleto.slice(0, -1);
        let dv = rutCompleto.slice(-1);
        let invertido = rut.split("").reverse();
        let formateado = "";

        for (let i = 0; i < invertido.length; i++) {
            if (i !== 0 && i % 3 === 0) {
                formateado = "." + formateado;
            }
            formateado = invertido[i] + formateado;
        }

        return formateado + "-" + dv;
    }

    function validarRUT(rutCompleto) {
        rutCompleto = rutCompleto.replace(/\./g, '').replace(/-/g, '').toUpperCase();

        const rut = rutCompleto.slice(0, -1);
        const dv = rutCompleto.slice(-1);

        if (!/^\d+$/.test(rut)) return false;

        let suma = 0;
        let multiplo = 2;

        for (let i = rut.length - 1; i >= 0; i--) {
            suma += parseInt(rut.charAt(i)) * multiplo;
            multiplo = multiplo === 7 ? 2 : multiplo + 1;
        }

        const dvEsperado = 11 - (suma % 11);
        let dvFinal = "";

        if (dvEsperado === 11) dvFinal = "0";
        else if (dvEsperado === 10) dvFinal = "K";
        else dvFinal = dvEsperado.toString();

        return dvFinal === dv;
    }
});


