<?php
ob_start();

error_reporting(E_ALL);
ini_set('display_errors', '0');

header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Content-Type: application/json; charset=utf-8");

include_once '../conexion.php';
include_once '../clases/TokenValidator.php';

try {
    if (!isset($conn)) {
        throw new Exception("No existe la variable de conexi¨®n \$conn.");
    }

    TokenValidator::validar($conn);

    $raw = file_get_contents("php://input");
    $data = json_decode($raw, true);

    if (!is_array($data)) {
        throw new Exception("JSON inv¨¢lido recibido: " . $raw);
    }

    $movimiento_id = 0;
    $operacion = 'CMP';

    if (isset($data[0])) {
        $movimiento_id = (int)$data[0];
    }

    if (isset($data[1]) && trim($data[1]) !== '') {
        $operacion = strtoupper(trim($data[1]));
    }

    if ($movimiento_id <= 0) {
        ob_clean();
        echo json_encode([], JSON_UNESCAPED_UNICODE);
        exit;
    }

    /*
      IMPORTANTE:
      Si tu tabla kardex_serieprod NO tiene almacen_id,
      cambia esta l¨ªnea:
          COALESCE(almacen_id, 0) AS almacen_id
      por:
          0 AS almacen_id
    */

    $sql = "
        SELECT
            serie,
            ABS(COALESCE(cantidad, 1))::numeric(12,3) AS cantidad,
            producto_id,
            movimiento_id,
            operacion,
            COALESCE(almacen_id, 0) AS almacen_id
        FROM public.kardex_serieprod
        WHERE movimiento_id = :movimiento_id
          AND operacion = :operacion
          AND COALESCE(anulado, false) = false
        ORDER BY producto_id, id
    ";

    $stmt = $conn->prepare($sql);
    $stmt->bindValue(':movimiento_id', $movimiento_id, PDO::PARAM_INT);
    $stmt->bindValue(':operacion', $operacion, PDO::PARAM_STR);
    $stmt->execute();

    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

    ob_clean();
    echo json_encode($rows, JSON_UNESCAPED_UNICODE | JSON_NUMERIC_CHECK);
    exit;

} catch (Throwable $e) {
    ob_clean();

    http_response_code(500);

    error_log("ERROR compras_seriexproducto.php: " . $e->getMessage()
        . " | Archivo: " . $e->getFile()
        . " | L¨ªnea: " . $e->getLine()
    );

    echo json_encode([
        "ok" => false,
        "error" => $e->getMessage(),
        "file" => basename($e->getFile()),
        "line" => $e->getLine()
    ], JSON_UNESCAPED_UNICODE);
    exit;
}