<?php
$pageTitle = 'Nueva Orden';
require_once __DIR__ . '/../../config/config.php';
requireLogin();

$db = getDB();

// Estructura mínima para tipos de precio
$db->exec("CREATE TABLE IF NOT EXISTS tipos_precio (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    activo TINYINT(1) NOT NULL DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");

$db->exec("CREATE TABLE IF NOT EXISTS examenes_precios_tipo (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tipo_precio_id INT NOT NULL,
    examen_id INT NOT NULL,
    precio DECIMAL(10,2) NOT NULL DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uq_tipo_examen (tipo_precio_id, examen_id),
    CONSTRAINT fk_examenes_precios_tipo_tipo FOREIGN KEY (tipo_precio_id) REFERENCES tipos_precio(id) ON DELETE CASCADE,
    CONSTRAINT fk_examenes_precios_tipo_examen FOREIGN KEY (examen_id) REFERENCES examenes(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");

$stmtTipoDefault = $db->query("SELECT id FROM tipos_precio ORDER BY id LIMIT 1");
$tipoDefaultId = $stmtTipoDefault->fetchColumn();
if (!$tipoDefaultId) {
    $stmtInsertTipo = $db->prepare("INSERT INTO tipos_precio (nombre, activo) VALUES (?, 1)");
    $stmtInsertTipo->execute(['General']);
    $tipoDefaultId = $db->lastInsertId();
}

$tipo_precio_id = intval(isset($_POST['tipo_precio_id']) ? $_POST['tipo_precio_id'] : (isset($_GET['tipo_id']) ? $_GET['tipo_id'] : $tipoDefaultId));
$stmtTipoVal = $db->prepare("SELECT id, nombre FROM tipos_precio WHERE id = ? AND activo = 1");
$stmtTipoVal->execute([$tipo_precio_id]);
$tipoPrecioActual = $stmtTipoVal->fetch();
if (!$tipoPrecioActual) {
    $tipo_precio_id = intval($tipoDefaultId);
    $stmtTipoVal->execute([$tipo_precio_id]);
    $tipoPrecioActual = $stmtTipoVal->fetch();
}

$stmtTipos = $db->query("SELECT id, nombre FROM tipos_precio WHERE activo = 1 ORDER BY nombre");
$tiposPrecio = $stmtTipos->fetchAll();

// Sincronizar lista de precios del tipo actual con exámenes activos
$stmtSync = $db->prepare("INSERT INTO examenes_precios_tipo (tipo_precio_id, examen_id, precio)
    SELECT ?, e.id, e.precio
    FROM examenes e
    LEFT JOIN examenes_precios_tipo pt ON pt.tipo_precio_id = ? AND pt.examen_id = e.id
    WHERE pt.id IS NULL");
$stmtSync->execute([$tipo_precio_id, $tipo_precio_id]);

// Verificar si existe columna en ordenes para trazabilidad de tipo de precio
$tieneColTipoPrecio = $db->query("SHOW COLUMNS FROM ordenes LIKE 'tipo_precio_id'")->fetch();

// Si viene paciente_id preseleccionado
$paciente_id = intval(isset($_GET['paciente_id']) ? $_GET['paciente_id'] : 0);
$pacienteSeleccionado = null;
if ($paciente_id) {
    $stmt = $db->prepare("SELECT * FROM pacientes WHERE id = ?");
    $stmt->execute([$paciente_id]);
    $pacienteSeleccionado = $stmt->fetch();
}

// Obtener exámenes activos con categorías y precio aplicado por tipo
$stmt = $db->query("
    SELECT e.*, c.nombre as categoria_nombre, c.id as cat_id,
           COALESCE(pt.precio, e.precio) as precio_aplicado
    FROM examenes e 
    LEFT JOIN examenes_precios_tipo pt ON pt.examen_id = e.id AND pt.tipo_precio_id = " . intval($tipo_precio_id) . "
    LEFT JOIN categorias_examenes c ON e.categoria_id = c.id 
    WHERE e.activo = 1 
    ORDER BY c.nombre, e.nombre
");
$examenes = $stmt->fetchAll();

// Obtener categorías para el filtro
$categorias = $db->query("SELECT * FROM categorias_examenes ORDER BY nombre")->fetchAll();

// Obtener perfiles activos con sus exámenes
$perfiles = $db->query("
    SELECT p.*, 
           GROUP_CONCAT(ped.examen_id) as examenes_ids,
        (SELECT COALESCE(p.precio_perfil, SUM(COALESCE(pt2.precio, e2.precio))) 
            FROM perfil_examenes_detalle ped2 
            JOIN examenes e2 ON ped2.examen_id = e2.id 
         LEFT JOIN examenes_precios_tipo pt2 ON pt2.examen_id = e2.id AND pt2.tipo_precio_id = " . intval($tipo_precio_id) . "
            WHERE ped2.perfil_id = p.id) as precio_calculado,
           COUNT(ped.id) as num_examenes
    FROM perfiles_examenes p
    LEFT JOIN perfil_examenes_detalle ped ON p.id = ped.perfil_id
    WHERE p.activo = 1
    GROUP BY p.id
    ORDER BY p.nombre
")->fetchAll();

// Agrupar por categoría
$examenesPorCategoria = [];
foreach ($examenes as $ex) {
    $cat = $ex['categoria_nombre'] ?: 'Sin categoría';
    $examenesPorCategoria[$cat][] = $ex;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $paciente_id = intval($_POST['paciente_id']);
    $examenes_ids = isset($_POST['examenes']) ? $_POST['examenes'] : [];
    $tipo_precio_id = intval(isset($_POST['tipo_precio_id']) ? $_POST['tipo_precio_id'] : $tipoDefaultId);

    $stmtTipoVal->execute([$tipo_precio_id]);
    $tipoPrecioActual = $stmtTipoVal->fetch();
    if (!$tipoPrecioActual) {
        $tipo_precio_id = intval($tipoDefaultId);
    }
    
    if (!$paciente_id || empty($examenes_ids)) {
        showAlert('Debe seleccionar un paciente y al menos un examen', 'danger');
    } else {
        try {
            $db->beginTransaction();
            
            // Generar código de orden
            $codigo = generateCode('ORD');
            
            // Calcular totales
            $subtotal = 0;
            $placeholders = implode(',', array_fill(0, count($examenes_ids), '?'));
            $sqlPrecios = "SELECT e.id, COALESCE(pt.precio, e.precio) AS precio
                          FROM examenes e
                          LEFT JOIN examenes_precios_tipo pt ON pt.examen_id = e.id AND pt.tipo_precio_id = ?
                          WHERE e.id IN ($placeholders)";
            $stmt = $db->prepare($sqlPrecios);
            $paramsPrecios = array_merge([$tipo_precio_id], $examenes_ids);
            $stmt->execute($paramsPrecios);
            $examenesSeleccionados = $stmt->fetchAll();
            
            foreach ($examenesSeleccionados as $ex) {
                $subtotal += $ex['precio'];
            }
            
            $descuento = floatval(isset($_POST['descuento']) ? $_POST['descuento'] : 0);
            $total = $subtotal - $descuento;
            
            // Crear orden
            $token_publico = hash('sha256', $codigo . uniqid() . time() . random_bytes(16));
            if ($tieneColTipoPrecio) {
                $stmt = $db->prepare("
                    INSERT INTO ordenes (codigo, paciente_id, usuario_id, laboratorista_id, tipo_precio_id, medico_solicitante, 
                                        fecha_entrega_estimada, observaciones, subtotal, descuento, total, token_publico)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
                ");
                $stmt->execute([
                    $codigo,
                    $paciente_id,
                    $_SESSION['user_id'],
                    !empty($_POST['laboratorista_id']) ? intval($_POST['laboratorista_id']) : null,
                    $tipo_precio_id,
                    sanitize(isset($_POST['medico']) ? $_POST['medico'] : ''),
                    $_POST['fecha_entrega'] ?: null,
                    sanitize(isset($_POST['observaciones']) ? $_POST['observaciones'] : ''),
                    $subtotal,
                    $descuento,
                    $total,
                    $token_publico
                ]);
            } else {
                $stmt = $db->prepare("
                    INSERT INTO ordenes (codigo, paciente_id, usuario_id, laboratorista_id, medico_solicitante, 
                                        fecha_entrega_estimada, observaciones, subtotal, descuento, total, token_publico)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
                ");
                $stmt->execute([
                    $codigo,
                    $paciente_id,
                    $_SESSION['user_id'],
                    !empty($_POST['laboratorista_id']) ? intval($_POST['laboratorista_id']) : null,
                    sanitize(isset($_POST['medico']) ? $_POST['medico'] : ''),
                    $_POST['fecha_entrega'] ?: null,
                    sanitize(isset($_POST['observaciones']) ? $_POST['observaciones'] : ''),
                    $subtotal,
                    $descuento,
                    $total,
                    $token_publico
                ]);
            }
            
            $orden_id = $db->lastInsertId();
            
            // Insertar detalle
            $stmt = $db->prepare("INSERT INTO orden_detalle (orden_id, examen_id, precio) VALUES (?, ?, ?)");
            foreach ($examenesSeleccionados as $ex) {
                $stmt->execute([$orden_id, $ex['id'], $ex['precio']]);
            }
            
            // Descontar insumos del inventario
            $insuficientes = [];
            $forzar = isset($_POST['forzar_sin_stock']);
            
            // Primero verificar stock
            foreach ($examenes_ids as $examen_id) {
                $stmtInsumos = $db->prepare("SELECT ei.*, i.nombre as insumo_nombre, i.stock_actual 
                                              FROM examenes_insumos ei 
                                              JOIN insumos i ON ei.insumo_id = i.id 
                                              WHERE ei.examen_id = ?");
                $stmtInsumos->execute([$examen_id]);
                $insumos = $stmtInsumos->fetchAll();
                
                foreach ($insumos as $ins) {
                    if ($ins['stock_actual'] < $ins['cantidad']) {
                        $insuficientes[] = [
                            'nombre' => $ins['insumo_nombre'],
                            'requerido' => $ins['cantidad'],
                            'disponible' => $ins['stock_actual'],
                            'faltante' => $ins['cantidad'] - $ins['stock_actual']
                        ];
                    }
                }
            }
            
            // Si hay stock insuficiente y no se fuerza, mostrar advertencia
            if (!empty($insuficientes) && !$forzar) {
                $db->rollBack();
                $mensaje = '<strong>⚠️ Stock insuficiente:</strong><br><ul>';
                foreach ($insuficientes as $item) {
                    $mensaje .= '<li>' . htmlspecialchars($item['nombre']) . ': '
                             . 'Requiere ' . $item['requerido'] . ', '
                             . 'Disponible: ' . $item['disponible'] . ', '
                             . '<strong>Faltan: ' . $item['faltante'] . '</strong></li>';
                }
                $mensaje .= '</ul>';
                $mensaje .= '<form method="POST" style="display:inline;">';
                foreach ($_POST as $key => $val) {
                    if (is_array($val)) {
                        foreach ($val as $v) {
                            $mensaje .= '<input type="hidden" name="' . htmlspecialchars($key) . '[]" value="' . htmlspecialchars($v) . '">';
                        }
                    } else {
                        $mensaje .= '<input type="hidden" name="' . htmlspecialchars($key) . '" value="' . htmlspecialchars($val) . '">';
                    }
                }
                $mensaje .= '<input type="hidden" name="forzar_sin_stock" value="1">';
                $mensaje .= '<button type="submit" class="btn btn-warning mt-2"><i class="bi bi-exclamation-triangle"></i> Continuar de Todas Formas</button> ';
                $mensaje .= '<a href="' . SITE_URL . '/modules/inventario/list.php" class="btn btn-primary mt-2" target="_blank"><i class="bi bi-box-seam"></i> Ir a Inventario</a>';
                $mensaje .= '</form>';
                showAlert($mensaje, 'warning');
            } else {
                // Proceder con el descuento de inventario
                foreach ($examenes_ids as $examen_id) {
                    $stmtInsumos = $db->prepare("SELECT * FROM examenes_insumos WHERE examen_id = ?");
                    $stmtInsumos->execute([$examen_id]);
                    $insumos = $stmtInsumos->fetchAll();
                    
                    foreach ($insumos as $ins) {
                        // Obtener stock actual
                        $stmtStock = $db->prepare("SELECT stock_actual FROM insumos WHERE id = ?");
                        $stmtStock->execute([$ins['insumo_id']]);
                        $stockActual = $stmtStock->fetchColumn();
                        
                        $nuevoStock = $stockActual - $ins['cantidad'];
                        
                        // Actualizar stock
                        $stmtUpdate = $db->prepare("UPDATE insumos SET stock_actual = ? WHERE id = ?");
                        $stmtUpdate->execute([$nuevoStock, $ins['insumo_id']]);
                        
                        // Registrar movimiento
                        $stmtMov = $db->prepare("
                            INSERT INTO movimientos_inventario 
                            (insumo_id, tipo, cantidad, stock_anterior, stock_nuevo, motivo, orden_id, usuario_id)
                            VALUES (?, 'salida', ?, ?, ?, ?, ?, ?)
                        ");
                        $stmtMov->execute([
                            $ins['insumo_id'],
                            $ins['cantidad'],
                            $stockActual,
                            $nuevoStock,
                            "Orden $codigo",
                            $orden_id,
                            $_SESSION['user_id']
                        ]);
                    }
                }
                
                $db->commit();
                
                showAlert('Orden creada correctamente: ' . $codigo);
                header('Location: view.php?id=' . $orden_id);
                exit;
            }
            
        } catch (PDOException $e) {
            $db->rollBack();
            showAlert('Error al crear la orden: ' . $e->getMessage(), 'danger');
        }
    }
}

require_once __DIR__ . '/../../includes/header.php';
?>

<div class="d-flex justify-content-between align-items-center mt-4 mb-4">
    <h2><i class="bi bi-clipboard-plus"></i> Nueva Orden de Exámenes</h2>
    <a href="list.php" class="btn btn-outline-secondary">
        <i class="bi bi-arrow-left"></i> Volver
    </a>
</div>

<form method="POST" id="formOrden">
    <div class="row">
        <!-- Selección de Paciente -->
        <div class="col-md-8">
            <div class="card mb-4">
                <div class="card-header">
                    <h5 class="mb-0"><i class="bi bi-person"></i> Datos del Paciente</h5>
                </div>
                <div class="card-body">
                    <div class="row">
                        <div class="col-md-8">
                            <label class="form-label">Buscar Paciente *</label>
                            <select name="paciente_id" id="paciente_id" class="form-select" required>
                                <option value="">Seleccione un paciente...</option>
                                <?php
                                $stmtPac = $db->query("SELECT * FROM pacientes ORDER BY nombre, apellidos");
                                while ($pac = $stmtPac->fetch()):
                                ?>
                                <option value="<?= $pac['id'] ?>" 
                                        <?= $paciente_id == $pac['id'] ? 'selected' : '' ?>
                                        data-sexo="<?= $pac['sexo'] ?>"
                                        data-nacimiento="<?= $pac['fecha_nacimiento'] ?>">
                                    <?= $pac['documento_numero'] ?> - <?= $pac['nombre'] . ' ' . $pac['apellidos'] ?>
                                </option>
                                <?php endwhile; ?>
                            </select>
                        </div>
                        <div class="col-md-4 d-flex align-items-end">
                            <a href="<?= SITE_URL ?>/modules/pacientes/create.php" class="btn btn-outline-primary">
                                <i class="bi bi-person-plus"></i> Nuevo Paciente
                            </a>
                        </div>
                    </div>
                    
                    <div class="row mt-3">
                        <div class="col-md-4">
                            <label class="form-label">Laboratorista Encargado</label>
                            <select name="laboratorista_id" class="form-select">
                                <option value="">Asignar después...</option>
                                <?php
                                $stmtLab = $db->query("SELECT id, nombre FROM usuarios WHERE rol = 'laboratorista' AND activo = 1 ORDER BY nombre");
                                while ($lab = $stmtLab->fetch()):
                                ?>
                                <option value="<?= $lab['id'] ?>"><?= htmlspecialchars($lab['nombre']) ?></option>
                                <?php endwhile; ?>
                            </select>
                            <small class="text-muted">Responsable de procesar los resultados</small>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label">Tipo de Precio</label>
                            <select name="tipo_precio_id" id="tipo_precio_id" class="form-select">
                                <?php foreach ($tiposPrecio as $tipoPrecio): ?>
                                <option value="<?= $tipoPrecio['id'] ?>" <?= $tipoPrecio['id'] == $tipo_precio_id ? 'selected' : '' ?>>
                                    <?= htmlspecialchars($tipoPrecio['nombre']) ?>
                                </option>
                                <?php endforeach; ?>
                            </select>
                            <small class="text-muted">Al cambiar, se recarga para mostrar precios de esa lista</small>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label">Médico Solicitante</label>
                            <input type="text" name="medico" class="form-control" placeholder="Nombre del médico">
                        </div>
                    </div>
                    <div class="row mt-3">
                        <div class="col-md-4">
                            <label class="form-label">Fecha de Entrega Estimada</label>
                            <input type="date" name="fecha_entrega" class="form-control">
                        </div>
                    </div>
                </div>
            </div>

            <!-- Selección de Exámenes -->
            <div class="card mb-4">
                <div class="card-header">
                    <h5 class="mb-0"><i class="bi bi-droplet"></i> Seleccionar Exámenes</h5>
                </div>
                <div class="card-body">
                    <!-- Perfiles rápidos -->
                    <?php if (!empty($perfiles)): ?>
                    <div class="mb-3">
                        <label class="form-label"><i class="bi bi-lightning-charge"></i> Perfiles Rápidos</label>
                        <div class="d-flex flex-wrap gap-2">
                            <?php foreach ($perfiles as $perf): ?>
                            <button type="button" class="btn btn-outline-success btn-sm perfil-btn"
                                    data-examenes="<?= htmlspecialchars(isset($perf['examenes_ids']) ? $perf['examenes_ids'] : '') ?>"
                                    data-nombre="<?= htmlspecialchars($perf['nombre']) ?>"
                                    title="<?= htmlspecialchars($perf['descripcion']) ?> (<?= $perf['num_examenes'] ?> exámenes)">
                                <i class="bi bi-collection"></i> <?= htmlspecialchars($perf['nombre']) ?>
                                <?php if ($perf['precio_calculado']): ?>
                                <span class="badge bg-light text-success"><?= formatMoney($perf['precio_calculado']) ?></span>
                                <?php endif; ?>
                            </button>
                            <?php endforeach; ?>
                        </div>
                        <small class="text-muted">Haga clic en un perfil para seleccionar todos sus exámenes</small>
                    </div>
                    <hr>
                    <?php endif; ?>
                    
                    <!-- Filtros de búsqueda -->
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label">Filtrar por Categoría</label>
                            <select id="filtroCategoria" class="form-select">
                                <option value="">Todas las categorías</option>
                                <?php foreach ($categorias as $cat): ?>
                                <option value="<?= htmlspecialchars($cat['nombre']) ?>"><?= htmlspecialchars($cat['nombre']) ?></option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                        <div class="col-md-8">
                            <label class="form-label">Buscar Examen</label>
                            <input type="text" id="buscarExamen" class="form-control" 
                                   placeholder="Escriba para buscar por nombre...">
                        </div>
                    </div>
                    
                    <!-- Acciones rápidas -->
                    <div class="mb-3 d-flex gap-2">
                        <button type="button" class="btn btn-sm btn-outline-primary" id="expandirTodos">
                            <i class="bi bi-arrows-expand"></i> Expandir Todo
                        </button>
                        <button type="button" class="btn btn-sm btn-outline-secondary" id="colapsarTodos">
                            <i class="bi bi-arrows-collapse"></i> Colapsar Todo
                        </button>
                        <button type="button" class="btn btn-sm btn-outline-danger" id="limpiarSeleccion">
                            <i class="bi bi-x-circle"></i> Limpiar Selección
                        </button>
                        <span class="ms-auto badge bg-primary align-self-center" id="contadorExamenes">0 exámenes seleccionados</span>
                    </div>
                    
                    <div class="accordion" id="accordionExamenes">
                        <?php $i = 0; foreach ($examenesPorCategoria as $categoria => $exs): ?>
                        <div class="accordion-item categoria-item" data-categoria="<?= htmlspecialchars($categoria) ?>">
                            <h2 class="accordion-header">
                                <button class="accordion-button <?= $i > 0 ? 'collapsed' : '' ?>" type="button" 
                                        data-bs-toggle="collapse" data-bs-target="#cat<?= $i ?>">
                                    <?= htmlspecialchars($categoria) ?> 
                                    <span class="badge bg-secondary ms-2"><?= count($exs) ?></span>
                                    <span class="badge bg-success ms-1 categoria-seleccionados" style="display:none;">0</span>
                                </button>
                            </h2>
                            <div id="cat<?= $i ?>" class="accordion-collapse collapse <?= $i == 0 ? 'show' : '' ?>">
                                <div class="accordion-body">
                                    <div class="mb-2">
                                        <button type="button" class="btn btn-xs btn-outline-primary seleccionar-categoria" 
                                                data-categoria="<?= htmlspecialchars($categoria) ?>">
                                            <i class="bi bi-check-all"></i> Seleccionar toda la categoría
                                        </button>
                                    </div>
                                    <div class="row">
                                        <?php foreach ($exs as $ex): ?>
                                        <div class="col-md-6 examen-item mb-2" data-categoria="<?= htmlspecialchars($categoria) ?>">
                                            <div class="form-check">
                                                <input class="form-check-input examen-check" type="checkbox" 
                                                       name="examenes[]" value="<?= $ex['id'] ?>" 
                                                       id="ex<?= $ex['id'] ?>"
                                                           data-precio="<?= $ex['precio_aplicado'] ?>"
                                                       data-nombre="<?= htmlspecialchars($ex['nombre']) ?>"
                                                       data-categoria="<?= htmlspecialchars($categoria) ?>">
                                                <label class="form-check-label" for="ex<?= $ex['id'] ?>">
                                                    <strong><?= htmlspecialchars($ex['nombre']) ?></strong>
                                                        <span class="text-primary ms-2"><?= formatMoney($ex['precio_aplicado']) ?></span>
                                                    <?php if ($ex['requiere_ayuno']): ?>
                                                    <span class="badge bg-warning text-dark ms-1">Ayuno</span>
                                                    <?php endif; ?>
                                                </label>
                                            </div>
                                        </div>
                                        <?php endforeach; ?>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <?php $i++; endforeach; ?>
                    </div>
                </div>
            </div>
        </div>

        <!-- Resumen -->
        <div class="col-md-4">
            <div class="card sticky-top" style="top: 20px;">
                <div class="card-header bg-primary text-white">
                    <h5 class="mb-0"><i class="bi bi-receipt"></i> Resumen de Orden</h5>
                </div>
                <div class="card-body">
                    <div id="listaExamenes" class="mb-3">
                        <p class="text-muted text-center">No hay exámenes seleccionados</p>
                    </div>
                    
                    <hr>
                    
                    <div class="d-flex justify-content-between mb-2">
                        <span>Subtotal:</span>
                        <strong id="subtotal"><?= formatMoney(0) ?></strong>
                    </div>
                    
                    <div class="mb-3">
                        <label class="form-label">Descuento</label>
                        <div class="input-group">
                            <span class="input-group-text"><?= CURRENCY ?></span>
                            <input type="number" name="descuento" id="descuento" class="form-control" 
                                   value="0" min="0" step="0.01">
                        </div>
                    </div>
                    
                    <div class="d-flex justify-content-between mb-3">
                        <span class="h5">TOTAL:</span>
                        <strong class="h5 text-primary" id="total"><?= formatMoney(0) ?></strong>
                    </div>
                    
                    <div class="mb-3">
                        <label class="form-label">Observaciones</label>
                        <textarea name="observaciones" class="form-control" rows="2"></textarea>
                    </div>
                    
                    <div id="insumosRequeridos" class="mb-3" style="display: none;">
                        <hr>
                        <h6 class="text-muted"><i class="bi bi-box-seam"></i> Insumos a Consumir</h6>
                        <div id="listaInsumos" class="small"></div>
                    </div>
                    
                    <div class="d-grid">
                        <button type="submit" class="btn btn-primary btn-lg">
                            <i class="bi bi-check-lg"></i> Crear Orden
                        </button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</form>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const checkboxes = document.querySelectorAll('.examen-check');
    const listaExamenes = document.getElementById('listaExamenes');
    const subtotalEl = document.getElementById('subtotal');
    const totalEl = document.getElementById('total');
    const descuentoInput = document.getElementById('descuento');
    const buscarInput = document.getElementById('buscarExamen');
    const filtroCategoria = document.getElementById('filtroCategoria');
    const insumosRequeridos = document.getElementById('insumosRequeridos');
    const listaInsumos = document.getElementById('listaInsumos');
    const contadorExamenes = document.getElementById('contadorExamenes');
    const tipoPrecioSelect = document.getElementById('tipo_precio_id');
    
    // Función para actualizar contador de categorías seleccionadas
    function actualizarContadoresCategorias() {
        document.querySelectorAll('.categoria-item').forEach(cat => {
            const categoria = cat.dataset.categoria;
            const checks = cat.querySelectorAll('.examen-check:checked');
            const badge = cat.querySelector('.categoria-seleccionados');
            if (checks.length > 0) {
                badge.textContent = checks.length;
                badge.style.display = '';
            } else {
                badge.style.display = 'none';
            }
        });
        
        // Contador total
        const totalSeleccionados = document.querySelectorAll('.examen-check:checked').length;
        contadorExamenes.textContent = totalSeleccionados + ' examen(es) seleccionado(s)';
    }
    
    async function cargarInsumos() {
        const examenesSeleccionados = [];
        checkboxes.forEach(cb => {
            if (cb.checked) {
                examenesSeleccionados.push(cb.value);
            }
        });
        
        if (examenesSeleccionados.length === 0) {
            insumosRequeridos.style.display = 'none';
            return;
        }
        
        try {
            const response = await fetch('<?= SITE_URL ?>/modules/ordenes/get_insumos.php?examenes=' + examenesSeleccionados.join(','));
            const data = await response.json();
            
            if (data.insumos && data.insumos.length > 0) {
                let html = '<div class="list-group list-group-flush">';
                const insumosAgrupados = {};
                
                data.insumos.forEach(ins => {
                    if (!insumosAgrupados[ins.insumo_id]) {
                        insumosAgrupados[ins.insumo_id] = {
                            nombre: ins.nombre,
                            cantidad: 0,
                            unidad: ins.unidad_medida,
                            stock: ins.stock_actual
                        };
                    }
                    insumosAgrupados[ins.insumo_id].cantidad += parseFloat(ins.cantidad);
                });
                
                Object.values(insumosAgrupados).forEach(ins => {
                    const suficiente = ins.stock >= ins.cantidad;
                    const clase = suficiente ? 'text-success' : 'text-danger';
                    const icono = suficiente ? '✓' : '⚠️';
                    html += `<div class="list-group-item p-2 ${clase}">
                        ${icono} ${ins.nombre}: ${ins.cantidad} ${ins.unidad} 
                        <small class="text-muted">(Disponible: ${ins.stock})</small>
                    </div>`;
                });
                
                html += '</div>';
                listaInsumos.innerHTML = html;
                insumosRequeridos.style.display = 'block';
            } else {
                insumosRequeridos.style.display = 'none';
            }
        } catch (error) {
            console.error('Error al cargar insumos:', error);
        }
    }
    
    function actualizarResumen() {
        let subtotal = 0;
        let html = '';
        
        checkboxes.forEach(cb => {
            if (cb.checked) {
                const precio = parseFloat(cb.dataset.precio);
                subtotal += precio;
                html += `<div class="d-flex justify-content-between mb-1">
                    <small>${cb.dataset.nombre}</small>
                    <small>${formatMoney(precio)}</small>
                </div>`;
            }
        });
        
        if (html === '') {
            html = '<p class="text-muted text-center">No hay exámenes seleccionados</p>';
        }
        
        listaExamenes.innerHTML = html;
        subtotalEl.textContent = formatMoney(subtotal);
        
        const descuento = parseFloat(descuentoInput.value) || 0;
        const total = subtotal - descuento;
        totalEl.textContent = formatMoney(total);
        
        actualizarContadoresCategorias();
        cargarInsumos();
    }
    
    checkboxes.forEach(cb => {
        cb.addEventListener('change', actualizarResumen);
    });
    
    descuentoInput.addEventListener('input', actualizarResumen);
    
    // Buscar exámenes por nombre
    buscarInput.addEventListener('input', function() {
        const buscar = this.value.toLowerCase();
        const categoriaFiltro = filtroCategoria.value;
        
        document.querySelectorAll('.examen-item').forEach(item => {
            const nombre = item.querySelector('.form-check-label').textContent.toLowerCase();
            const categoria = item.dataset.categoria;
            
            const coincideNombre = nombre.includes(buscar);
            const coincideCategoria = !categoriaFiltro || categoria === categoriaFiltro;
            
            item.style.display = (coincideNombre && coincideCategoria) ? '' : 'none';
        });
        
        // Mostrar/ocultar categorías vacías
        document.querySelectorAll('.categoria-item').forEach(cat => {
            const visibles = cat.querySelectorAll('.examen-item:not([style*="display: none"])').length;
            cat.style.display = visibles > 0 ? '' : 'none';
            
            // Expandir categoría si tiene resultados de búsqueda
            if (buscar && visibles > 0) {
                const collapse = cat.querySelector('.accordion-collapse');
                if (collapse && !collapse.classList.contains('show')) {
                    new bootstrap.Collapse(collapse, {show: true});
                }
            }
        });
    });
    
    // Filtrar por categoría
    filtroCategoria.addEventListener('change', function() {
        const categoriaFiltro = this.value;
        const buscar = buscarInput.value.toLowerCase();
        
        document.querySelectorAll('.categoria-item').forEach(cat => {
            const categoria = cat.dataset.categoria;
            
            if (!categoriaFiltro || categoria === categoriaFiltro) {
                cat.style.display = '';
                // Expandir la categoría seleccionada
                if (categoriaFiltro) {
                    const collapse = cat.querySelector('.accordion-collapse');
                    if (collapse) new bootstrap.Collapse(collapse, {show: true});
                }
            } else {
                cat.style.display = 'none';
            }
        });
        
        // Aplicar también filtro de búsqueda
        if (buscar) {
            buscarInput.dispatchEvent(new Event('input'));
        }
    });
    
    // Perfiles rápidos
    document.querySelectorAll('.perfil-btn').forEach(btn => {
        btn.addEventListener('click', function() {
            const examenesIds = this.dataset.examenes.split(',').filter(id => id);
            const nombrePerfil = this.dataset.nombre;
            
            if (examenesIds.length === 0) {
                alert('Este perfil no tiene exámenes configurados');
                return;
            }
            
            // Seleccionar los exámenes del perfil
            examenesIds.forEach(id => {
                const checkbox = document.getElementById('ex' + id);
                if (checkbox) checkbox.checked = true;
            });
            
            actualizarResumen();
            
            // Visual feedback
            this.classList.remove('btn-outline-success');
            this.classList.add('btn-success');
            setTimeout(() => {
                this.classList.remove('btn-success');
                this.classList.add('btn-outline-success');
            }, 500);
        });
    });
    
    // Seleccionar toda la categoría
    document.querySelectorAll('.seleccionar-categoria').forEach(btn => {
        btn.addEventListener('click', function() {
            const categoria = this.dataset.categoria;
            document.querySelectorAll(`.examen-item[data-categoria="${categoria}"] .examen-check`).forEach(cb => {
                cb.checked = true;
            });
            actualizarResumen();
        });
    });
    
    // Expandir todos
    document.getElementById('expandirTodos').addEventListener('click', function() {
        document.querySelectorAll('.accordion-collapse').forEach(collapse => {
            new bootstrap.Collapse(collapse, {show: true});
        });
    });
    
    // Colapsar todos
    document.getElementById('colapsarTodos').addEventListener('click', function() {
        document.querySelectorAll('.accordion-collapse.show').forEach(collapse => {
            new bootstrap.Collapse(collapse, {hide: true});
        });
    });
    
    // Limpiar selección
    document.getElementById('limpiarSeleccion').addEventListener('click', function() {
        if (confirm('¿Desea quitar todos los exámenes seleccionados?')) {
            checkboxes.forEach(cb => cb.checked = false);
            actualizarResumen();
        }
    });

    if (tipoPrecioSelect) {
        tipoPrecioSelect.addEventListener('change', function() {
            const pacienteSel = document.getElementById('paciente_id');
            const pacienteId = pacienteSel && pacienteSel.value ? pacienteSel.value : '';
            let url = 'create.php?tipo_id=' + encodeURIComponent(this.value);
            if (pacienteId) {
                url += '&paciente_id=' + encodeURIComponent(pacienteId);
            }
            window.location.href = url;
        });
    }
});
</script>

<?php require_once __DIR__ . '/../../includes/footer.php'; ?>
