<?php
// Desactivar errores visibles para evitar romper el JSON
error_reporting(0);
ini_set('display_errors', 0);

session_start();
require_once "../modelos/Contabilidad.php";

header('Content-Type: application/json');

$contabilidad = new Contabilidad();

// Captura de parámetros robusta
$op           = isset($_GET['op']) ? $_GET['op'] : '';
$fecha_inicio = isset($_REQUEST['fi']) ? $_REQUEST['fi'] : date('Y-m-01');
$fecha_fin    = isset($_REQUEST['ff']) ? $_REQUEST['ff'] : date('Y-m-d');
$idempleado   = (isset($_REQUEST['med']) && !empty($_REQUEST['med'])) ? (int)$_REQUEST['med'] : 0;
$medFiltro    = ($idempleado > 0) ? $idempleado : null;

switch ($op) {

    case 'medicos':
        $data = [];
        $rs = $contabilidad->listarMedicos();
        if ($rs) {
            while ($r = $rs->fetch_object()) {
                $data[] = [
                    'id'           => $r->idusuario,
                    'nombre'       => ucwords(strtolower($r->nombre ?? '')),
                    'especialidad' => $r->especialidad ?? '-',
                    'cargo'        => $r->cargo ?? '-'
                ];
            }
        }
        echo json_encode(['ok' => true, 'data' => $data]);
        break;

    case 'resumenGlobal':
        $r = $contabilidad->resumenGlobal($fecha_inicio, $fecha_fin);
        // Si no hay resultados o falla la consulta, inicializar en 0
        echo json_encode([
            'ok'                => true,
            'total_atenciones'  => (int)($r['total_atenciones'] ?? 0),
            'total_ingresos'    => number_format((float)($r['total_ingresos'] ?? 0), 2),
            'promedio_consulta' => number_format((float)($r['promedio_consulta'] ?? 0), 2),
            'total_medicos'     => (int)($r['total_medicos'] ?? 0)
        ]);
        break;

    case 'resumenPorMedico':
        $data = [];
        $rs = $contabilidad->resumenPorMedico($fecha_inicio, $fecha_fin);
        if ($rs) {
            while ($r = $rs->fetch_object()) {
                $data[] = [
                    'idempleado'       => $r->idempleado,
                    'medico'           => ucwords(strtolower($r->medico ?? '')),
                    'especialidad'     => $r->especialidad ?? '-',
                    'total_atenciones' => (int)$r->total_atenciones,
                    'total_ingresos'   => number_format((float)$r->total_ingresos, 2),
                    'promedio'         => number_format((float)$r->promedio_consulta, 2),
                    'min'              => number_format((float)$r->min_consulta, 2),
                    'max'              => number_format((float)$r->max_consulta, 2)
                ];
            }
        }
        echo json_encode(['ok' => true, 'data' => $data]);
        break;

    case 'diarios':
        $labels = []; $atenciones = []; $ingresos = [];
        $rs = $contabilidad->ingresosDiarios($fecha_inicio, $fecha_fin, $medFiltro);
        if ($rs) {
            while ($r = $rs->fetch_object()) {
                $labels[]     = date('d/m', strtotime($r->dia));
                $atenciones[] = (int)$r->atenciones;
                $ingresos[]   = (float)$r->ingresos;
            }
        }
        echo json_encode(['ok' => true, 'labels' => $labels, 'atenciones' => $atenciones, 'ingresos' => $ingresos]);
        break;

    case 'semanales':
        $labels = []; $atenciones = []; $ingresos = [];
        $rs = $contabilidad->ingresosSemanales($fecha_inicio, $fecha_fin, $medFiltro);
        if ($rs) {
            while ($r = $rs->fetch_object()) {
                $labels[]     = 'Sem ' . $r->semana . ' (' . date('d/m', strtotime($r->inicio_semana)) . ')';
                $atenciones[] = (int)$r->atenciones;
                $ingresos[]   = (float)$r->ingresos;
            }
        }
        echo json_encode(['ok' => true, 'labels' => $labels, 'atenciones' => $atenciones, 'ingresos' => $ingresos]);
        break;

    case 'mensuales':
        $labels = []; $atenciones = []; $ingresos = [];
        $rs = $contabilidad->ingresosMensuales($fecha_inicio, $fecha_fin, $medFiltro);
        if ($rs) {
            while ($r = $rs->fetch_object()) {
                $labels[]     = $r->periodo;
                $atenciones[] = (int)$r->atenciones;
                $ingresos[]   = (float)$r->ingresos;
            }
        }
        echo json_encode(['ok' => true, 'labels' => $labels, 'atenciones' => $atenciones, 'ingresos' => $ingresos]);
        break;

    case 'listar':
        $data = [];
        $rs = $contabilidad->listarAtenciones($fecha_inicio, $fecha_fin, $medFiltro);
        if ($rs) {
            while ($r = $rs->fetch_object()) {
                $data[] = [
                    date('d/m/Y', strtotime($r->fecha)),
                    $r->hora,
                    ucwords(strtolower($r->paciente ?? '')),
                    ucwords(strtolower($r->medico ?? '')),
                    $r->especialidad ?? '-',
                    $r->servicio ?? '-',
                    '$ ' . number_format((float)($r->costo ?? 0), 2)
                ];
            }
        }
        $results = [
            'sEcho'                 => 1,
            'iTotalRecords'         => count($data),
            'iTotalDisplayRecords'  => count($data),
            'aaData'                => $data
        ];
        echo json_encode($results);
        break;

    default:
        echo json_encode(['ok' => false, 'msg' => 'Operacion no definida']);
}
?>
