<?php
session_start();
require_once 'db/config.php';

// Verificar que el usuario sea administrador
if (!isset($_SESSION['user_rol']) || ($_SESSION['user_rol'] !== 'admin' && $_SESSION['user_rol'] !== 'administrador')) {
    // Si no es admin, redirigir o mostrar un error
    header('Location: /liquidaciones.php?error=auth');
    exit;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $producto_id = $_POST['producto_id'] ?? null;
    $ciudad_id = $_POST['ciudad_id'] ?? null;
    $cantidad = $_POST['cantidad'] ?? null;
    $cantidad_pedidos = $_POST['cantidad_pedidos'] ?? null;
    $precio_liquidacion = $_POST['precio_liquidacion'] ?? null;

    // Validación simple
    if (empty($producto_id) || empty($ciudad_id) || empty($cantidad) || $cantidad <= 0 || empty($cantidad_pedidos) || empty($precio_liquidacion)) {
        header('Location: /liquidaciones.php?error=missing_fields');
        exit;
    }

    $pdo = db();

    try {
        $pdo->beginTransaction();

        // 1. Verificar stock actual
        $stmt = $pdo->prepare("SELECT stock_actual FROM stock_por_ciudad WHERE producto_id = :producto_id AND ciudad_id = :ciudad_id FOR UPDATE");
        $stmt->execute(['producto_id' => $producto_id, 'ciudad_id' => $ciudad_id]);
        $stock_disponible = $stmt->fetchColumn();

        if ($stock_disponible === false || $stock_disponible < $cantidad) {
            header('Location: /liquidaciones.php?error=no_stock');
            $pdo->rollBack();
            exit();
        }

        // 2. Actualizar el stock en la ciudad
        $stmt_stock = $pdo->prepare("UPDATE stock_por_ciudad SET stock_actual = stock_actual - :cantidad WHERE producto_id = :producto_id AND ciudad_id = :ciudad_id");
        $stmt_stock->execute([':cantidad' => $cantidad, ':producto_id' => $producto_id, ':ciudad_id' => $ciudad_id]);

        // 3. Insertar el movimiento de salida
        $stmt = $pdo->prepare("
            INSERT INTO movimientos 
            (tipo, producto_id, cantidad, ciudad_origen_id, cantidad_pedidos, precio_liquidacion, fecha, usuario_id)
            VALUES ('Salida', :producto_id, :cantidad, :ciudad_id, :cantidad_pedidos, :precio_liquidacion, NOW(), :usuario_id)
        ");

        $user_id = get_current_user_id();

        $stmt->execute([
            ':producto_id' => $producto_id,
            ':cantidad' => $cantidad,
            ':ciudad_id' => $ciudad_id,
            ':cantidad_pedidos' => $cantidad_pedidos,
            ':precio_liquidacion' => $precio_liquidacion,
            ':usuario_id' => $user_id
        ]);

        // Confirmar transacción
        $pdo->commit();

        header('Location: /liquidaciones.php?success=added');
        exit;

    } catch (PDOException $e) {
        // Revertir transacción en caso de error
        if ($pdo->inTransaction()) {
            $pdo->rollBack();
        }
        // Manejo de errores
        error_log($e->getMessage());
        header('Location: /liquidaciones.php?error=db_error');
        exit;
    }
} else {
    // Si no es POST, redirigir
    header('Location: /liquidaciones.php');
    exit;
}
?>