import { buildEndpoint } from './urlBuilder';
document.addEventListener('DOMContentLoaded', function() {
    const assistanceTable = $('#assistanceTable');
    const assistanceDailyTable = $('#assistanceDailyTable');
    const dateFromInput = document.getElementById('dateFrom');
    const dateToInput = document.getElementById('dateTo');
    const filterDateRangeButton = document.getElementById('filterDateRange');
    const resetDateRangeButton = document.getElementById('resetDateRange');

    function getCurrentMonthRange() {
        const now = new Date();
        const year = now.getFullYear();
        const month = now.getMonth();

        const start = new Date(year, month, 1);
        const end = new Date(year, month + 1, 0);

        const toYmd = (date) => {
            const y = date.getFullYear();
            const m = String(date.getMonth() + 1).padStart(2, '0');
            const d = String(date.getDate()).padStart(2, '0');
            return `${y}-${m}-${d}`;
        };

        return {
            from: toYmd(start),
            to: toYmd(end)
        };
    }

    function ensureDefaultDateRange() {
        if (!dateFromInput || !dateToInput) {
            return;
        }

        if (!dateFromInput.value || !dateToInput.value) {
            const monthRange = getCurrentMonthRange();
            if (!dateFromInput.value) {
                dateFromInput.value = monthRange.from;
            }
            if (!dateToInput.value) {
                dateToInput.value = monthRange.to;
            }
        }
    }

    // En la pantalla principal de asistencia, el modal diario se gestiona desde assistanceTableAjax.js.
    // Este archivo queda solo para páginas de reporte diario dedicadas.
    if (assistanceTable.length) {
        return;
    }

    if (assistanceDailyTable.length) {
        ensureDefaultDateRange();

        const dataTable = assistanceDailyTable.DataTable({
            processing: true,
            serverSide: true,
            scrollX: true,
            autoWidth: false,
            ajax: {
                url: buildEndpoint('admin-fit/assistance/jsonDaily'),
                type: 'GET',
                data: function (d) {
                    d.date_from = dateFromInput?.value || null;
                    d.date_to = dateToInput?.value || null;
                }
            },
            columns: [
                { data: 'user_name', name: 'user_name' ,className: 'text-center'},
                { data: 'entry_time', name: 'entry_time' ,className: 'text-center'},
                { data: 'period', name: 'period' ,className: 'text-center'},
                { data: 'created_at_formatted', name: 'created_at_formatted' ,className: 'text-center'}
            ],
            order: [[0, 'desc']]
            ,
            language: {
            "processing":     "Procesando...",
            "search":         "Buscar:",
            "lengthMenu":     "Mostrar _MENU_ registros",
            "info":           "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
            "infoEmpty":      "Mostrando registros del 0 al 0 de un total de 0 registros",
            "infoFiltered":   "(filtrado de un total de _MAX_ registros)",
            "infoPostFix":    "",
            "loadingRecords": "Cargando...",
            "zeroRecords":    "No se encontraron resultados",
            "emptyTable":     "Ningún dato disponible en esta tabla",
            "paginate": {
                "first":      "Primero",
                "previous":   "Anterior",
                "next":       "Siguiente",
                "last":       "Último"
            },
            "aria": {
                "sortAscending":  ": Activar para ordenar la columna de manera ascendente",
                "sortDescending": ": Activar para ordenar la columna de manera descendente"
            }
        }
        });

        filterDateRangeButton?.addEventListener('click', function () {
            dataTable.ajax.reload();
        });

        resetDateRangeButton?.addEventListener('click', function () {
            const monthRange = getCurrentMonthRange();

            if (dateFromInput) {
                dateFromInput.value = monthRange.from;
            }

            if (dateToInput) {
                dateToInput.value = monthRange.to;
            }

            dataTable.ajax.reload();
        });

    }
});