var tabla;
var chartIngresos = null;

// Función que se ejecuta al inicio
function init() {
    cargarMedicos();
    actualizarDashboard();

    // Eventos para recarga automática al cambiar filtros básicos
    $("#fecha_inicio, #fecha_fin, #idempleado_filtro").change(function() {
        actualizarDashboard();
    });
}

// Cargar lista de médicos en el select
function cargarMedicos() {
    console.log("Cargando médicos...");
    $.post("../ajax/contabilidad.php?op=medicos", function(r) {
        console.log("Respuesta médicos:", r);
        if (r.ok && r.data) {
            var options = '<option value="0">Todos los Médicos</option>';
            r.data.forEach(function(m) {
                options += '<option value="' + m.id + '">' + m.nombre + ' (' + m.especialidad + ')</option>';
            });
            $("#idempleado_filtro").html(options);
            $("#idempleado_filtro").selectpicker('refresh');
        }
    });
}

// Función principal para refrescar todo el dashboard
function actualizarDashboard() {
    var fi = $("#fecha_inicio").val();
    var ff = $("#fecha_fin").val();
    var med = $("#idempleado_filtro").val();

    cargarResumenGlobal(fi, ff);
    cargarRanking(fi, ff);
    listarAtenciones(fi, ff, med);
    cargarGrafico('diarios'); // Por defecto carga diario
}

// Cargar tarjetas de resumen superior
function cargarResumenGlobal(fi, ff) {
    $.post("../ajax/contabilidad.php?op=resumenGlobal", { fi: fi, ff: ff }, function(r) {
        if (r.ok) {
            $("#txt_total_ingresos").text("$ " + r.total_ingresos);
            $("#txt_total_atenciones").text(r.total_atenciones);
            $("#txt_promedio_consulta").text("$ " + r.promedio_consulta);
            $("#txt_total_medicos").text(r.total_medicos);
        }
    });
}

// Cargar tabla de ranking de médicos
function cargarRanking(fi, ff) {
    $.post("../ajax/contabilidad.php?op=resumenPorMedico", { fi: fi, ff: ff }, function(r) {
        if (r.ok) {
            var html = '';
            r.data.forEach(function(m) {
                html += '<tr>' +
                    '<td><b>' + m.medico + '</b></td>' +
                    '<td><span class="label label-info">' + (m.especialidad || 'General') + '</span></td>' +
                    '<td>' + m.total_atenciones + '</td>' +
                    '<td><b>$ ' + m.total_ingresos + '</b></td>' +
                    '<td>$ ' + m.promedio + '</td>' +
                    '<td><small class="text-muted">Min: $' + m.min + ' / Max: $' + m.max + '</small></td>' +
                    '</tr>';
            });
            if (r.data.length == 0) html = '<tr><td colspan="6" class="text-center">No hay datos en este periodo</td></tr>';
            $("#ranking_body").html(html);
        }
    });
}

// Cargar gráfico (Diario, Semanal o Mensual)
function cargarGrafico(tipo) {
    var fi = $("#fecha_inicio").val();
    var ff = $("#fecha_fin").val();
    var med = $("#idempleado_filtro").val();

    $.post("../ajax/contabilidad.php?op=" + tipo, { fi: fi, ff: ff, med: med }, function(r) {
        if (r.ok) {
            renderChart(r.labels, r.ingresos, r.atenciones);
        }
    });
}

function renderChart(labels, ingresos, atenciones) {
    var ctx = document.getElementById('grafico_ingresos').getContext('2d');
    
    if (chartIngresos) {
        chartIngresos.destroy();
    }

    chartIngresos = new Chart(ctx, {
        type: 'line',
        data: {
            labels: labels,
            datasets: [{
                label: 'Ingresos ($)',
                data: ingresos,
                borderColor: '#00aced',
                backgroundColor: 'rgba(0, 172, 237, 0.1)',
                borderWidth: 3,
                fill: true,
                yAxisID: 'y'
            }, {
                label: 'N° Atenciones',
                data: atenciones,
                borderColor: '#2ecc71',
                backgroundColor: 'transparent',
                borderWidth: 2,
                borderDash: [5, 5],
                type: 'bar',
                yAxisID: 'y1'
            }]
        },
        options: {
            responsive: true,
            maintainAspectRatio: false,
            scales: {
                y: {
                    type: 'linear',
                    display: true,
                    position: 'left',
                    title: { display: true, text: 'Monto ($)' }
                },
                y1: {
                    type: 'linear',
                    display: true,
                    position: 'right',
                    grid: { drawOnChartArea: false },
                    title: { display: true, text: 'Atenciones' }
                }
            }
        }
    });
}

// Listar detalle en DataTable
function listarAtenciones(fi, ff, med) {
    if (tabla) {
        tabla.destroy();
    }

    tabla = $('#tbllistado').DataTable({
        "aProcessing": true,
        "aServerSide": true,
        dom: 'Bfrtip',
        buttons: [
            'copyHtml5',
            'excelHtml5',
            'csvHtml5',
            {
                extend: 'pdfHtml5',
                orientation: 'landscape',
                pageSize: 'A4',
                title: 'Reporte de Contabilidad HC MEDICA'
            }
        ],
        "ajax": {
            url: '../ajax/contabilidad.php?op=listar',
            type: "get",
            data: { fi: fi, ff: ff, med: med },
            dataType: "json",
            error: function(e) {
                console.log(e.responseText);
            }
        },
        "footerCallback": function(row, data, start, end, display) {
            var api = this.api();
            var total = api.column(6).data().reduce(function(a, b) {
                var val = typeof b === 'string' ? b.replace(/[^\d.-]/g, '') * 1 : typeof b === 'number' ? b : 0;
                return a + val;
            }, 0);
            $("#total_acumulado_tabla").html('<b>$ ' + total.toLocaleString('en-US', {minimumFractionDigits: 2}) + '</b>');
        },
        "bDestroy": true,
        "iDisplayLength": 10,
        "order": [[0, "desc"]],
        "language": {
            "url": "../public/datatables/Spanish.json"
        }
    });
}

init();
