<?php
date_default_timezone_set('America/Lima');
require_once 'db/config.php';

// Asegurarse de que el usuario esté logueado
if (!isset($_SESSION['user_id'])) {
    $_SESSION['error'] = "Debe iniciar sesión para realizar esta acción.";
    header("Location: auth/login.php");
    exit();
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $producto_id = $_POST['producto_id'];
    $ciudad_id = $_POST['ciudad_id'];
    $cantidad = $_POST['cantidad'];
    $observacion = $_POST['descripcion']; // El campo del formulario se llama 'descripcion'
    $usuario_id = $_SESSION['user_id'];
    $fecha = $_POST['fecha'];

    if (empty($producto_id) || empty($ciudad_id) || empty($cantidad) || $cantidad <= 0) {
        $_SESSION['error'] = "Por favor, complete todos los campos obligatorios.";
        header("Location: registrar_salida.php");
        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) {
            $_SESSION['error'] = "No hay stock suficiente para realizar esta operación. Stock actual: " . ($stock_disponible ?: 0);
            header("Location: registrar_salida.php");
            $pdo->rollBack();
            exit();
        }

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

        // 3. Registrar el movimiento de salida
        $stmt = $pdo->prepare(
            "INSERT INTO movimientos (tipo, producto_id, ciudad_origen_id, cantidad, usuario_id, observacion, fecha, fecha_registro) 
             VALUES ('Salida', :producto_id, :ciudad_origen_id, :cantidad, :usuario_id, :observacion, :fecha, NOW())"
        );
        $stmt->execute([
            'producto_id' => $producto_id,
            'ciudad_origen_id' => $ciudad_id,
            'cantidad' => $cantidad,
            'usuario_id' => $usuario_id,
            'observacion' => $observacion,
            'fecha' => $fecha
        ]);

        $pdo->commit();

        $_SESSION['success'] = "Salida de producto registrada correctamente.";
        header("Location: productos.php");
        exit();

    } catch (Exception $e) {
        $pdo->rollBack();
        $_SESSION['error'] = "Error al registrar la salida: " . $e->getMessage();
        header("Location: registrar_salida.php");
        exit();
    }
} else {
    header("Location: registrar_salida.php");
    exit();
}
?>