<?php

error_reporting(E_ALL ^ E_NOTICE);

header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
header("Content-Type: application/json; charset=utf-8");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

include_once '../conexion.php';
include_once '../clases/TokenValidator.php';

$usuarioId = TokenValidator::validar($conn);

try {

    $bodyRequest = file_get_contents("php://input");
    $datos = json_decode($bodyRequest, true);

    /*
     * Java continúa enviando:
     *
     * posición 0 = empresa_id
     * posición 1 = sucursal_id
     * posición 2 = producto_id
     */
    if (
        !is_array($datos)
        || !array_key_exists(0, $datos)
        || !array_key_exists(1, $datos)
        || !array_key_exists(2, $datos)
    ) {
        throw new Exception(
            "Datos incompletos. Se espera [empresa_id, sucursal_id, producto_id]."
        );
    }

    /*
     * Se reciben por compatibilidad con Java,
     * pero empresa_id y sucursal_id ya no se utilizan
     * como filtros de la consulta.
     */
    $empresa_id  = (int) $datos[0];
    $sucursal_id = (int) $datos[1];
    $producto_id = (int) $datos[2];

    if ($producto_id <= 0) {
        throw new Exception("El producto_id no es válido.");
    }

    /*
     * Los precios son compartidos por ambas empresas.
     * Se consulta únicamente por producto_id.
     */
    $sql = "
        SELECT
            pprecio_menor,
            pprecio_mayor,
            pprecio_dist,
            pminimo_menor,
            pminimo_mayor,
            pminimo_dist,
            precmenor_und,
            precmenor_fra,
            precmayor_und,
            precmayor_fra,
            precdist_und,
            precdist_fra
        FROM public.precios_sucursal
        WHERE producto_id = :producto_id
        ORDER BY empresa_id, sucursal_id
        LIMIT 1
    ";

    $stmt = $conn->prepare($sql);

    $stmt->bindValue(
        ':producto_id',
        $producto_id,
        PDO::PARAM_INT
    );

    $stmt->execute();

    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    /*
     * Se conserva la respuesta original:
     * con resultado: [{...}]
     * sin resultado: []
     */
    echo json_encode(
        $row ? [$row] : [],
        JSON_UNESCAPED_UNICODE
    );

    exit();

} catch (PDOException $e) {

    error_log(
        "Error al consultar precios del producto: "
        . $e->getMessage()
    );

    error_response(
        "Error en base de datos: " . $e->getMessage()
    );

} catch (Exception $e) {

    error_response(
        "Error: " . $e->getMessage()
    );

} finally {

    $conn = null;
}


function error_response($message)
{
    http_response_code(500);

    echo json_encode(
        [
            'error' => $message
        ],
        JSON_UNESCAPED_UNICODE
    );

    exit();
}