<?php
header('Content-Type: application/json; charset=utf-8');
require_once __DIR__ . '/db.php';

try {
    $pdo = getConnection();

    // 1. Asegurar que la presentación id = 9 (MIXTO) exista en la tabla presentaciones
    $checkMixto = $pdo->prepare("SELECT id FROM presentaciones WHERE nombre = 'MIXTO' LIMIT 1");
    $checkMixto->execute();
    $mixto = $checkMixto->fetch();
    
    if (!$mixto) {
        try {
            // Intentar insertar con id explícito 9
            $pdo->exec("INSERT INTO presentaciones (id, nombre, descripcion) VALUES (9, 'MIXTO', 'Venta en precio mixto')");
        } catch (Exception $e) {
            // Si falla por restricción de ID, insertar normal
            $pdo->exec("INSERT INTO presentaciones (nombre, descripcion) VALUES ('MIXTO', 'Venta en precio mixto')");
        }
    }

    // 1.1 Asegurar que la presentación id = 10 (OCTAVO) exista en la tabla presentaciones
    $checkOctavo = $pdo->prepare("SELECT id FROM presentaciones WHERE nombre = 'OCTAVO' LIMIT 1");
    $checkOctavo->execute();
    $octavo = $checkOctavo->fetch();
    
    if (!$octavo) {
        try {
            // Intentar insertar con id explícito 10
            $pdo->exec("INSERT INTO presentaciones (id, nombre, descripcion) VALUES (10, 'OCTAVO', 'Venta por octavo de galón')");
        } catch (Exception $e) {
            // Si falla por restricción de ID, insertar normal
            $pdo->exec("INSERT INTO presentaciones (nombre, descripcion) VALUES ('OCTAVO', 'Venta por octavo de galón')");
        }
    }

    // 2. Obtener lugares de compra
    $stmtLugares = $pdo->query("SELECT id, nombre FROM lugarcompra WHERE activo = 1 OR activo IS NULL ORDER BY nombre ASC");
    $lugares = $stmtLugares->fetchAll();

    // 3. Obtener presentaciones
    $stmtPres = $pdo->query("SELECT id, nombre, descripcion FROM presentaciones ORDER BY id ASC");
    $presentaciones = $stmtPres->fetchAll();

    // 4. Obtener margen de ganancia por defecto
    $stmtMargin = $pdo->query("SELECT margen_ganancia_defecto FROM sucursal_configuracion LIMIT 1");
    $marginRow = $stmtMargin->fetch();
    $defaultMargin = $marginRow ? (float)$marginRow['margen_ganancia_defecto'] : 30.00;

    // 5. Obtener márgenes específicos de laboratorios
    $stmtLabMargins = $pdo->query("SELECT id, laboratorio, margen_ganancia_porcentaje FROM laboratorio_margenes ORDER BY laboratorio ASC");
    $labMargins = $stmtLabMargins->fetchAll();

    // 6. Obtener lista de laboratorios únicos para los filtros
    $stmtLabs = $pdo->query("SELECT DISTINCT laboratorio FROM productos WHERE laboratorio IS NOT NULL AND laboratorio != '' ORDER BY laboratorio ASC");
    $laboratorios = $stmtLabs->fetchAll();

    echo json_encode([
        'success' => true,
        'lugares' => $lugares,
        'presentaciones' => $presentaciones,
        'default_margin' => $defaultMargin,
        'lab_margins' => $labMargins,
        'laboratorios' => $laboratorios
    ]);

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'error' => 'Error al obtener catálogos: ' . $e->getMessage()
    ]);
}
