var peso = {
    validaEntero: function  ( value ) {
        var RegExPattern = /[0-9]+$/;
        return RegExPattern.test(value);
    },
    formateaNumero: function (value) {
        if (peso.validaEntero(value))  {  
            var retorno = '';
            value = value.toString().split('').reverse().join('');
            var i = value.length;
            while(i>0) retorno += ((i%3===0&&i!=value.length)?'.':'')+value.substring(i--,i);
            return retorno;
        }
        return 0;
    },
    quitar_formato : function(numero){
        numero = numero.split('.').join('');
        return numero;
    }
}

var Fn = {
    // Valida el rut con su cadena completa "XXXXXXXX-X"
    validaRut : function (rutCompleto) {
        var rutCompleto_ =  rutCompleto.replace(/\./g, "");

        if (!/^[0-9]+[-|‐]{1}[0-9kK]{1}$/.test( rutCompleto_ ))
            return false;
        var tmp     = rutCompleto_.split('-');
        var digv    = tmp[1]; 
        var rut     = tmp[0];
        if ( digv == 'K' ) digv = 'k' ;
        return (Fn.dv(rut) == digv );
    },
    dv : function(T){
        var M=0,S=1;
        for(;T;T=Math.floor(T/10))
            S=(S+T%10*(9-M++%6))%11;
        return S?S-1:'k';
    },
    formatear : function(rut){
        var tmp = this.quitar_formato(rut);
        var rut = tmp.substring(0, tmp.length - 1), f = "";
        while(rut.length > 3) {
            f = '.' + rut.substr(rut.length - 3) + f;
            rut = rut.substring(0, rut.length - 3);
        }
        return ($.trim(rut) == '') ? '' : rut + f + "-" + tmp.charAt(tmp.length-1);
    },
    quitar_formato : function(rut){
        rut = rut.split('-').join('').split('.').join('');
        return rut;
    }
}

function convertirMayusculas(texto) {
    var text = texto.toUpperCase().trim();
    return text;
}

function buscar_deudas() {
    var rut = $("#txt_run").val().split(".").join("");
    var rut = rut.split("-");
    var rut = rut[0];

    if (rut != "") {
        $("#txt_total").val(0);
        $("#divRelleno").addClass("d-none");
        $("#divRelleno").removeClass("d-lg-block");
        $("#divContentDatatable").removeClass("d-none");
        $("#grid_deuda").dataTable().fnReloadAjax("assets/modelo/buscar_deudas.php?rut=" + rut);
    } else {
        Swal.fire({
            icon: "warning",
            title: "Ingresar RUN",
            text: "Debe ingresar su RUN",
            footer: "Ingresar RUN"
        });
    }
}

function sumar_deudas() {
    var total = 0;
    var datos = $("#grid_deuda").DataTable().rows(".selected").data();

    for (var i = 0; i < datos.length; i++) {
        total += parseInt(datos[i].total_pagar);
    }

    $("#txt_total").val(peso.formateaNumero(total));
}

function pagar_deudas() {
    var datos = $("#grid_deuda").DataTable().rows(".selected").data();
    var datos_caja = [];
    var id_apr = 0;
    var id_socio = 0;

    if (datos.length > 0) {
        Swal.fire({
            title: "Total: $" + $("#txt_total").val(),
            text: "¿Pagar deuda(s)?",
            icon: "question",
            showCancelButton: true,
            confirmButtonColor: "#3085d6",
            cancelButtonColor: "#d33",
            confirmButtonText: "Si",
            cancelButtonText: "No"
        }).then((result) => {
            if (result.isConfirmed) {
                for (var i = 0; i < datos.length; i++) {
                    if (id_socio != datos[i].id_socio) {
                        datos_caja.push({
                            "id_socio": datos[i].id_socio, 
                            "id_apr": datos[i].id_apr,
                            "id_metros": [],
                            "total_pagar": []
                        });
                    }

                    id_socio = datos[i].id_socio;
                }

                for (var i = 0; i < datos_caja.length; i++) {
                    for (var e = 0; e < datos.length; e++) {
                        if (datos_caja[i].id_socio == datos[e].id_socio) {
                            datos_caja[i].id_metros.push(datos[e].id_metros),
                            datos_caja[i].total_pagar.push(datos[e].total_pagar);
                        }
                    }
                }
                
                $.ajax({
                    url: "assets/modelo/pago.php",
                    type: "POST",
                    async: false,
                    dataType: "json",
                    data: { datos: datos_caja },
                    success: function(respuesta) {
                        if (respuesta.estado == "exito") {
                            var total = $("#txt_total").val();
                            var data_webpay = respuesta.data;
                            console.log(data_webpay);
                            
                            console.log("Éxito en la transacción con gestionapr.cl");
                            $("#divContentDatatable").addClass("d-none");
                            $("#divContentWait").removeClass("d-none");
                            $("#btn_buscar").prop("disabled", true);
                            
                            $.ajax({
                                url: "assets/modelo/generar_transaccion.php",
                                type: "POST",
                                async: false,
                                dataType: "json",
                                data: data_webpay,
                                success: function(data){
                                    console.log('data generar transaccion');
                                    console.log(data);
                                    autoSendWebpay(data.data.url,data.data.token);
                                },
                                error: function(error){
                                    console.log('error');
                                    console.log(error.responseJSON.message);
                                    swal.fire(error.responseJSON.message);
                                }
                            });
            
                            // procedimiento para webpay
                        } else {
                            Swal.fire({
                                icon: "error",
                                title: "Error en la transacción",
                                text: respuesta.message,
                                footer: "Error en la transacción"
                            });
                        }
                    },
                    error: function(error) {
                        respuesta = JSON.parse(error["responseText"]);
                        alerta.error("alerta", respuesta.message);
                        Swal.fire({
                            icon: "error",
                            title: "Error en la transacción",
                            text: respuesta.message,
                            footer: "Error en la transacción"
                        });
                    }
                });
            }
        });
    } else {
        Swal.fire({
            icon: "warning",
            title: "Seleccione deuda",
            text: "Debe seleccionar al menos una deuda",
            footer: "Seleccione deuda"
        });
    }
}

function cancelar_pago() {
    $("#txt_run").val("");
    $("#txt_total").val(0);
    $("#divRelleno").removeClass("d-none");
    $("#divRelleno").addClass("d-lg-block");
    $("#divContentDatatable").addClass("d-none");
    $("#grid_deuda").DataTable().clear().draw();
}

$(document).ready(function() {
    $("#txt_total").prop("readonly", true);

    $("#txt_run").on("blur", function() {
        if ($(this).val() != "") {
            if (Fn.validaRut(Fn.formatear($(this).val()))) {
                $(this).val(convertirMayusculas(Fn.formatear($(this).val())));
            } else {
                Swal.fire({
                    icon: "error",
                    title: "Error",
                    text: "RUN Incorrecto",
                    footer: "RUN Incorrecto"
                });
                
                $(this).val("");
                setTimeout(function() { $(this).focus(); }, 100);
            }
        }
    });

    $("#btn_buscar").on("click", function() {
        buscar_deudas();
    });

    $("#btn_pagar").on("click", function() {
        pagar_deudas();
    });

    $("#btn_cancelar").on("click", function() {
        cancelar_pago();
    });

    var grid_deuda = $("#grid_deuda").DataTable({
		responsive: true,
        destroy: true,
        paging: false,
        ordering: false,
        info: false,
        searching: false,
        order: [[ 3, "desc" ]],
        // ajax: base_url + "/Formularios/Ctrl_arranques/datatable_arranques",
        orderClasses: true,
        columns: [
            { "data": "id_socio" },
            { "data": "nombre" },
            { "data": "mes_consumo" },
            { 
                "data": "total_pagar",
                "render": function(data, type, row) {
                    return "<div style='font-size: 150%;'><b>" + peso.formateaNumero(data) + "</b></div>";
                }
            },
            { "data": "id_apr" },
            { "data": "id_metros" },
            { "data": "apr" },
            { "data": "codigo_comercio" }
        ],
        "columnDefs": [
            { "targets": [0, 4, 5, 7], "visible": false, "searchable": false }
        ],
        select: "multi",
        language: {
            "loadingRecords": "Cargando...",
            "processing": "Procesando...",
            "zeroRecords": "Sin deuda vigente",
            "select": {
                "rows": "<br/>%d Deuda(s) seleccionada(s)"
            }
        }
	});

    grid_deuda.on("select", function (e, dt, type, indexes) {
        sumar_deudas();
    }).on("deselect", function (e, dt, type, indexes) {
        sumar_deudas();
    });

});

function autoSendWebpay(url, token) {
    var form = document.createElement("form");
    var element1 = document.createElement("input"); 

    form.method = "POST";
    form.action = url;   

    element1.value=token;
    element1.name="token_ws";
    form.appendChild(element1);  

    document.body.appendChild(form);

    form.submit();
}