<?php
/**
 * API: Obtener factores de conversión de un producto
 * Retorna los factores para BLISTER y CAJA para validación de stock
 */

header('Content-Type: application/json; charset=utf-8');
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");

require_once '../../db_connection.php';

$response = [
    'success' => false,
    'factor_blister' => 1,
    'factor_caja' => 1,
    'stock' => 0
];

try {
    $producto_id = isset($_GET['producto_id']) ? (int)$_GET['producto_id'] : 0;
    
    if ($producto_id <= 0) {
        throw new Exception('ID de producto inválido');
    }
    
    // Obtener sucursal activa y nombre en una sola query
    $config = require '../../config/sucursal_activa.php';
    $sucursal_id = $config['sucursal_id'];
    
    $stmtSuc = $pdo->prepare("SELECT nombre FROM sucursales WHERE id = ?");
    $stmtSuc->execute([$sucursal_id]);
    $sucursalNombre = $stmtSuc->fetchColumn();
    
    // Determinar nombre del lugar de compra
    $lugarNombre = ($sucursal_id == 1 || strtoupper($sucursalNombre) == 'BODEGACENTRAL') ? 'General' : $sucursalNombre;
    
    // 1. Obtener stock total
    $sqlStock = "SELECT COALESCE(stock_total, 0) as stock FROM inventario_sucursal WHERE producto_id = :pid AND sucursal_id = :suc_id";
    $stmtStock = $pdo->prepare($sqlStock);
    $stmtStock->bindValue(':pid', $producto_id, PDO::PARAM_INT);
    $stmtStock->bindValue(':suc_id', $sucursal_id, PDO::PARAM_INT);
    $stmtStock->execute();
    $stock = (int)$stmtStock->fetchColumn();

    // 2. Obtener todas las presentaciones activas ordenadas
    $sqlPres = "
        SELECT pp.factor_conversion, pp.es_unidad_base
        FROM producto_presentaciones pp
        WHERE pp.producto_id = :pid AND pp.activo = 1
        ORDER BY pp.es_unidad_base DESC, pp.orden ASC, pp.presentacion_id ASC
    ";
    $stmtPres = $pdo->prepare($sqlPres);
    $stmtPres->bindValue(':pid', $producto_id, PDO::PARAM_INT);
    $stmtPres->execute();
    $prodPres = $stmtPres->fetchAll(PDO::FETCH_ASSOC);

    $base = null;
    $others = [];
    foreach ($prodPres as $p) {
        if ((int)$p['es_unidad_base'] === 1 && $base === null) {
            $base = $p;
        } else {
            $others[] = $p;
        }
    }
    if ($base === null && !empty($prodPres)) {
        $base = array_shift($prodPres);
        $others = $prodPres;
    }

    $factor_blister = 1;
    $factor_caja = 1;

    if (isset($others[0])) {
        $factor_blister = max(1, (int)$others[0]['factor_conversion']);
    }
    if (isset($others[1])) {
        $factor_caja = max(1, (int)$others[1]['factor_conversion']);
    }

    $response['success'] = true;
    $response['factor_blister'] = $factor_blister;
    $response['factor_caja'] = $factor_caja;
    $response['stock'] = $stock;
    
    // Calcular disponibilidad por presentación
    $response['disponible'] = [
        'unidades' => $stock,
        'blisters' => floor($stock / $factor_blister),
        'cajas' => floor($stock / $factor_caja),
        'residuo_blister' => $stock % $factor_blister,
        'residuo_caja_blisters' => floor(($stock % $factor_caja) / $factor_blister),
        'residuo_caja_unidades' => ($stock % $factor_caja) % $factor_blister
    ];
    
} catch (Exception $e) {
    $response['success'] = false;
    $response['error'] = $e->getMessage();
}

echo json_encode($response, JSON_UNESCAPED_UNICODE);
?>
