<?php
/** GET /api/lab/get_ordenes.php — Lista paginada de órdenes médicas con filtros */
require_once __DIR__ . '/_helpers.php';
requireMethod('GET');

try {
    $om = new OrdenMedica();

    $filtros = array_filter([
        'estado'      => $_GET['estado']      ?? '',
        'paciente_id' => (int)($_GET['paciente_id'] ?? 0) ?: null,
        'desde'       => $_GET['desde']       ?? '',
        'hasta'       => $_GET['hasta']       ?? '',
        'busqueda'    => trim($_GET['busqueda'] ?? $_GET['search'] ?? ''),
    ], fn($v) => $v !== null && $v !== '');

    $pagina = max(1, (int)($_GET['page'] ?? 1));
    $por    = max(1, min(100, (int)($_GET['limit'] ?? 30)));

    // Vista de una sola orden
    if (!empty($_GET['id'])) {
        $orden = $om->obtener((int)$_GET['id']);
        if (!$orden) {
            jsonError('Orden no encontrada', 404);
        }
        jsonOk(['orden' => $orden]);
    }

    $resultado = $om->listar($filtros, $pagina, $por);

    // Incluir también el contador por estado para el dashboard
    if (!isset($_GET['no_counts'])) {
        $resultado['contadores'] = $om->contadorPorEstado();
    }

    jsonOk($resultado);
} catch (Exception $e) {
    jsonError($e->getMessage(), 500);
}
