function reporteMatricula(id) {
    $("#cuadro_tabla_matr").html("");
    var idalum = $("#idAlum").val();
    $("#carg_reporte").show()
    var url = "php/reporteAlumnoMat.php";
    $("#cuadro_tabla_matr").html('<table id="reporte_cuenta_matr" class="table table-striped table-bordered dataTable no-footer"></table>');
    (function ($) {
        if ($("#reporte_cuenta_matr").length) {
            'use strict';
            var EditableTable = {
                initialize: function () {
                    this
                        .build();
                },
                build: function () {

                    moment.locale("es-do");

                    // Setup - add a text input to each footer cell

                    $('#reporte_cuenta_matr thead th').each(function () {
                        var title = $(this).text();
                        $(this).html('<input type="text" placeholder="Buscar ' + title + '" />');
                    });

                    //el número del dato json por el que vamos agrupar
                    var groupColumn = 1;

                    var table = $('#reporte_cuenta_matr').DataTable({
                        "language": {
                            "url": "src/js/ajax/esp.json"
                        },
                        "ajax": {
                            "url": 'php/reporteAlumnoMat.php',
                            "type": 'POST',
                            "data": {
                                "id": id,
                                "idAlum": idalum
                            }
                        },
                        "aoColumns": [
                            { "data": "idPago" },
                            { "data": "monto_matricula" },
                            { "data": "monto_abonado" },
                            { "data": "forma_pago" },
                            { "data": "cheque_banco" },
                            { "data": "num_cheque" },
                            { "data": "monto_cheque" },
                            { "data": "num_factura" },
                            { "data": "estadoPago" },
                        ],
                        "columnDefs": [
                            { "orderable": false, "targets": 0 },
                            { "orderable": false, "targets": 1 },
                            { "orderable": false, "targets": 2 },
                            { "orderable": false, "targets": 3 },
                            { "orderable": false, "targets": 4 },
                            { "visible": true, "targets": groupColumn },
                            { "orderable": false, "targets": 6 },
                            { "orderable": false, "targets": 7 },
                            { "orderable": false, "targets": 8 },
                            { "orderable": false, "targets": 9 },

                            { "title": "#", "targets": 0 },
                            { "title": "Monto de Matricula", "targets": 1 },
                            { "title": "Monto abonado", "targets": 2 },
                            { "title": "Forma de pago", "targets": 3 },
                            { "title": "Cheque banco", "targets": 4 },
                            { "title": "Num Cheque", "targets": 5 },
                            { "title": "Monto Cheque", "targets": 6 },
                            { "title": "Número de factura", "targets": 7 },
                            { "title": "Estado de pago", "targets": 8 },
                            { "title": "Opciones", "targets": 9 },

                            { "targets": [4], "render": $.fn.dataTable.render.moment('DD, MMMM Y') },
                            { "targets": [1], "render": $.fn.dataTable.render.number('.', '.', 0) },
                            { "targets": [2], "render": $.fn.dataTable.render.number('.', '.', 0) },

                            {
                                "targets": [9], "data": null, "render": function (data, type, full, meta) {
                                    if (data.estadoPago == 'cancelado') {
                                        return '<a class="btn btn-xs btn-info" target="_blank" href=pago.php?id=' + data.idPago + '>Ver pago</a> <a class="btn btn-xs btn-info" href=javascript:cancelaPagoMT(2,' + data.idPago + ')>Revertir Pago</a>'
                                    } else {
                                        return '<a class="btn btn-xs btn-info" target="_blank" href=pago.php?id=' + data.idPago + '>Ver pago</a> <a class="btn btn-xs btn-danger" href=javascript:cancelaPagoMT(1,' + data.idPago + ')>Cancelar Pago</a>';
                                    }
                                }
                            }
                        ],
                        "order": [[groupColumn, 'asc']],
                        "displayLength": 25,
                        "drawCallback": function (settings) {
                            var api = this.api();
                            var rows = api.rows({ page: 'current' }).nodes();
                            var last = null;

                            api.column(groupColumn, { page: 'current' }).data().each(function (group, i) {
                                if (last !== group) {
                                    $(rows).eq(i).before(
                                        '<tr class="group"><td colspan="10">Matricula: ' + group + ' Gs.</td></tr>'
                                    );

                                    last = group;
                                }
                            });
                        }
                    });


                    // Apply the search
                    table.columns().every(function () {
                        var that = this;

                        $('#reporte_cuenta_matr input', this.footer()).on('keyup change', function () {
                            if (that.search() !== this.value) {
                                that
                                    .search(this.value)
                                    .draw();
                            }
                        });
                    });

                    window.dt = this.datatable;
                    return this;
                }
            };

            $(function () {
                EditableTable.initialize();
            });
        }
    }).apply(this, [jQuery]);
}

function reporteMesPendientes(id) {
    const mes = $("#op_mes").val();
    const anho = $("#op_anho").val();
    const curso = $("#op_curso").val();

    $("#carg_reporte_pend").show();
    $("#cuadro_tabla_pend").html(`
        <table id="reporte_pagos_pendientes" class="table table-striped table-bordered dataTable no-footer">
            <thead></thead>
            <tfoot></tfoot>
        </table>
    `);

    if (!$("#reporte_pagos_pendientes").length) return;

    moment.locale("es-do");

    const columnas = [
        {
            data: null,
            title: "Nombre de Alumno",
            render: function (data) {
                return `${data.Nombre} ${data.Apellido}`;
            }
        },
        { data: "descripcion", title: "Curso" },
        { data: "montoCuota", title: "Cuota", "render": $.fn.dataTable.render.number('.', '.', 0) }, 
        {
            data: null,
            title: "Padre",
            render: function (data) {
                const nombre = data.nombrePadre || "-";
                const telefono = (data.telefonoPadre || "").replace(/\s+/g, '').trim();

                const validoLocal = /^09\d{8}$/.test(telefono);
                const validoIntl = /^\+5959\d{7}$/.test(telefono);

                if (validoLocal || validoIntl) {
                    const numero = validoIntl
                        ? telefono.replace('+', '')
                        : '595' + telefono.substring(1);

                    return `${nombre} - <strong>Notificar: </strong><a href="https://wa.me/${numero}?text=Hola ${nombre}, desde el CEI Santa Catalina de Siena le recordamos que registra una mora en el pago de la cuota correspondiente. Agradecemos su atención." target="_blank">${telefono}</a>`;
                }

                return nombre;
            }
        },
        {
            data: null,
            title: "Madre",
            render: function (data) {
                const nombre = data.nombreMadre || "-";
                const telefono = (data.telefonoMadre || "").replace(/\s+/g, '').trim();

                const validoLocal = /^09\d{8}$/.test(telefono);
                const validoIntl = /^\+5959\d{7}$/.test(telefono);

                if (validoLocal || validoIntl) {
                    const numero = validoIntl
                        ? telefono.replace('+', '')
                        : '595' + telefono.substring(1);

                    return `${nombre} - <strong>Notificar: </strong><a href="https://wa.me/${numero}?text=Hola ${nombre}, desde el CEI Santa Catalina de Siena le recordamos que registra una mora en el pago de la cuota correspondiente. Agradecemos su atención." target="_blank">${telefono}</a>`;
                }

                return nombre;
            }
        }


    ];

    const table = $('#reporte_pagos_pendientes').DataTable({
        dom: 'Bfrtip',
        buttons: ['pdf'],
        language: {
            url: "src/js/ajax/esp.json"
        },
        ajax: {
            url: 'php/reportePagosPend.php',
            type: 'POST',
            data: {
                id: mes,
                anho: anho,
                curso: curso
            }
        },
        columns: columnas,
        order: [[1, 'asc']],
        initComplete: function () {
            const api = this.api();
            api.columns().every(function () {
                const column = this;
                const title = $(column.header()).text();
                const input = $('<input type="text" placeholder="Buscar ' + title + '" />')
                    .appendTo($(column.footer()).empty())
                    .on('keyup change', function () {
                        if (column.search() !== this.value) {
                            column.search(this.value).draw();
                        }
                    });
            });
        }
    });

    window.dt = table;
}

function esTelefonoValido(numero) {
    const limpio = numero.replace(/\s+/g, '').trim();

    // Formato local: 10 dígitos, comienza con 09
    const regexLocal = /^09\d{8}$/;

    // Formato internacional: comienza con +595 seguido de 9 dígitos
    const regexInternacional = /^\+5959\d{7}$/;

    return regexLocal.test(limpio) || regexInternacional.test(limpio);
}


function cancelaPagoMT(op, id) {
    var table = $('#reporte_cuenta_matr').DataTable();
    if (op == '2') {
        var textoOp = 'aprobara';
        var textoOp2 = 'aprobado';
    } else {
        var textoOp = 'anulara';
        var textoOp2 = 'anulado';
    }
    //Warning Message
    swal({
        title: "Estás seguro?",
        text: "Se " + textoOp + " esta factura de pago de matricula",
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: "#DD6B55",
        confirmButtonText: "Aceptar",
        closeOnConfirm: false
    }, function () {
        $.ajax({
            type: 'POST',
            url: 'php/cancelaPagoMT.php',
            data: "id=" + id + "&op=" + op,
            success: function (eliminar) {
                var resultado = eval(eliminar);
                if (resultado[0] == 1) {
                    swal({
                        title: "CORRECTO!",
                        text: "Pago de matricula " + textoOp2 + " con éxito",
                        type: "success",
                        confirmButtonText: "Aceptar"
                    },
                        function () {
                            table.ajax.reload();
                        })
                } else if (resultado[0] == 2) {
                    swal("UPS!", 'No se ha podido procesar, vuelve a intentar más tarde.', "error");
                }
            }, error: function (eliminar) {
                swal("UPS!", "Ocurrió un error interno, por favor intenta nuevamente", "error");
            }
        });
    });
    return false;
}

function cancelaPago(op, id) {
    var table = $('#reporte_cuenta').DataTable();
    if (op == '2') {
        var textoOp = 'aprobara';
        var textoOp2 = 'aprobado';
    } else {
        var textoOp = 'anulara';
        var textoOp2 = 'anulado';
    }
    //Warning Message
    swal({
        title: "Estás seguro?",
        text: "Se " + textoOp + " esta factura de pago",
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: "#DD6B55",
        confirmButtonText: "Aceptar",
        closeOnConfirm: false
    }, function () {
        $.ajax({
            type: 'POST',
            url: 'php/cancelaPago.php',
            data: "id=" + id + "&op=" + op,
            success: function (eliminar) {
                var resultado = eval(eliminar);
                if (resultado[0] == 1) {
                    swal({
                        title: "CORRECTO!",
                        text: "Pago " + textoOp2 + " con éxito",
                        type: "success",
                        confirmButtonText: "Aceptar"
                    },
                        function () {
                            table.ajax.reload();
                        })
                } else if (resultado[0] == 2) {
                    swal("UPS!", 'No se ha podido procesar, vuelve a intentar más tarde.', "error");
                }
            }, error: function (eliminar) {
                swal("UPS!", "Ocurrió un error interno, por favor intenta nuevamente", "error");
            }
        });
    });
    return false;
}

function cambiaReporte(id, tipo) {
    $("#cuadro_tabla").html('<table id="reporte_cuenta" class="table table-striped table-bordered dataTable no-footer"><thead></thead><tfoot></tfoot></table>');
    $("#carg_reporte").show();

    const idalum = $("#idAlum").val();
    const anhoL = $("#anhoL").val();

    const esCurso = tipo === 'curso';
    const groupColumn = 5;

    const columnasCurso = [
        { data: "idPago", title: "#" },
        { data: "monto_cuota", title: "Monto de Cuota", render: $.fn.dataTable.render.number('.', '.', 0) },
        { data: "monto_pago", title: "Monto abonado", render: $.fn.dataTable.render.number('.', '.', 0) },
        { data: "intCurso", title: "Curso" },
        { data: "fechaPago", title: "Fecha de pago" },
        { data: "mesPago", title: "Mes" },
        { data: "num_factura", title: "Número factura" },
        { data: "estadoPago", title: "Estado de Pago" },
        {
            data: null, title: "Opciones", orderable: false, render: function (data) {
                const ver = `<a class="btn btn-xs btn-info" target="_blank" href=reciboCuota.php?id=${data.idPago}>Ver pago</a>`;
                const btn = data.estadoPago === 'cancelado'
                    ? `<a class="btn btn-xs btn-info" href="javascript:cancelaPago(2,${data.idPago})">Revertir Pago</a>`
                    : `<a class="btn btn-xs btn-danger" href="javascript:cancelaPago(1,${data.idPago})">Cancelar Pago</a>`;
                return `${ver} ${btn}`;
            }
        }
    ];

    const columnasMes = [
        { data: "idPago", title: "#" },
        { data: "fechaPago", title: "Fecha pago" },
        { data: "monto_cuota", title: "Monto Cuota", render: $.fn.dataTable.render.number('.', '.', 0) },
        { data: "monto_pago", title: "Abonado", render: $.fn.dataTable.render.number('.', '.', 0) },
        { data: "num_factura", title: "Número de factura" },
        {
            data: null, title: "Opciones", orderable: false, render: function (data) {
                const ver = `<a class="btn btn-xs btn-info" target="_blank" href=reciboCuota.php?id=${data.idPago}>Ver pago</a>`;
                const btn = data.estadoPago === 'cancelado'
                    ? `<a class="btn btn-xs btn-info" href="javascript:cancelaPago(2,${data.idPago})">Revertir Pago</a>`
                    : `<a class="btn btn-xs btn-danger" href="javascript:cancelaPago(1,${data.idPago})">Cancelar Pago</a>`;
                return `${ver} ${btn}`;
            }
        }
    ];

    moment.locale("es-do");

    const tabla = $('#reporte_cuenta').DataTable({
        language: {
            url: "src/js/ajax/esp.json"
        },
        ajax: {
            url: 'php/reporteAlumno.php',
            type: 'POST',
            data: { id: id, tipo: tipo, idAlum: idalum, anho: anhoL }
        },
        columns: esCurso ? columnasCurso : columnasMes,
        order: esCurso ? [[groupColumn, 'asc']] : [],
        displayLength: esCurso ? 25 : 30,
        drawCallback: function (settings) {
            if (esCurso) {
                const api = this.api();
                const rows = api.rows({ page: 'current' }).nodes();
                let last = null;

                api.column(groupColumn, { page: 'current' }).data().each(function (group, i) {
                    if (last !== group) {
                        $(rows).eq(i).before('<tr class="group"><td colspan="9">' + group + '</td></tr>');
                        last = group;
                    }
                });
            }
        },
        initComplete: function () {
            const api = this.api();
            api.columns().every(function () {
                const column = this;
                const title = $(column.header()).text();
                const input = $('<input type="text" placeholder="Buscar ' + title + '" />')
                    .appendTo($(column.footer()).empty())
                    .on('keyup change', function () {
                        if (column.search() !== this.value) {
                            column.search(this.value).draw();
                        }
                    });
            });
        }
    });

    window.dt = tabla;
}
