<?php
header('Content-Type: application/json; charset=UTF-8');
header('Access-Control-Allow-Origin: *');

require_once 'conexion.php';

function calcularStockDisponibleProducto($conn, $producto)
{
    $controlaStock = (int)$producto['crt_stock'] === 1;
    if (!$controlaStock) {
        return null;
    }

    $usaReceta = (int)$producto['receta'] === 1;

    if (!$usaReceta) {
        return max(0, (int)floor((float)$producto['stock']));
    }

    $idPres = (int)$producto['id_pres'];
    $sqlIngredientes = "
        SELECT pi.cant, ins.stock
        FROM tm_producto_ingr pi
        INNER JOIN tm_insumo ins ON ins.id_ins = pi.id_ins
        WHERE pi.id_pres = {$idPres}
    ";

    $resultIngredientes = mysqli_query($conn, $sqlIngredientes);
    if (!$resultIngredientes) {
        return 0;
    }

    $maxUnidades = null;
    while ($ing = mysqli_fetch_assoc($resultIngredientes)) {
        $cantNecesaria = (float)$ing['cant'];
        $stockInsumo = (float)$ing['stock'];

        if ($cantNecesaria <= 0) {
            continue;
        }

        $unidadesPosibles = (int)floor($stockInsumo / $cantNecesaria);
        $maxUnidades = is_null($maxUnidades)
            ? $unidadesPosibles
            : min($maxUnidades, $unidadesPosibles);
    }

    if (is_null($maxUnidades)) {
        return 0;
    }

    return max(0, (int)$maxUnidades);
}

$sql = "
    SELECT
        pres.id_pres,
        pres.presentacion,
        CASE
            WHEN pres.precio_delivery > 0 THEN pres.precio_delivery
            ELSE pres.precio
        END AS precio,
        pres.precio AS precio_base,
        pres.precio_delivery,
        pres.descripcion,
        pres.imagen AS archivo_imagen,
        pres.crt_stock,
        pres.receta,
        pres.stock,
        pres.favorito,
        prod.nombre AS nombre_producto,
        catg.descripcion AS categoria
    FROM tm_producto_pres pres
    INNER JOIN tm_producto prod ON pres.id_prod = prod.id_prod
    INNER JOIN tm_producto_catg catg ON prod.id_catg = catg.id_catg
    WHERE pres.estado = 'a'
      AND prod.estado = 'a'
      AND catg.estado = 'a'
      AND pres.delivery = 1
    ORDER BY catg.orden, prod.nombre, pres.ordenins
";

$result = mysqli_query($conn, $sql);
if (!$result) {
    http_response_code(500);
    echo json_encode(["error" => "Error en la consulta de productos: " . mysqli_error($conn)]);
    mysqli_close($conn);
    exit;
}

$data = [];
while ($row = mysqli_fetch_assoc($result)) {
    $stockDisponible = calcularStockDisponibleProducto($conn, $row);
    $controlaStock = (int)$row['crt_stock'] === 1;

    $row['stock_disponible'] = $stockDisponible;
    $row['mostrar_stock'] = $controlaStock ? 1 : 0;
    $row['disponible_web'] = !$controlaStock || $stockDisponible > 0 ? 1 : 0;

    $data[] = $row;
}

mysqli_close($conn);
echo json_encode($data);
?>
