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

if (!is_logged_in()) {
    $_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'] ?? null;
    $ciudad_id = $_POST['ciudad_id'] ?? null;
    $cantidad = $_POST['cantidad'] ?? null;
    $observacion = $_POST['observacion'] ?? '';
    $usuario_id = get_current_user_id();

    if (empty($producto_id) || empty($ciudad_id) || empty($cantidad) || !is_numeric($cantidad) || $cantidad <= 0) {
        $_SESSION['error'] = "Por favor, complete todos los campos correctamente.";
        header("Location: registrar_entrada.php");
        exit();
    }

    $pdo = db();

    try {
        $pdo->beginTransaction();

        // 1. Verificar si ya existe stock para este producto en esta ciudad
        $stmt = $pdo->prepare("SELECT id 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_id = $stmt->fetchColumn();

        // 2. Actualizar o insertar el stock
        if ($stock_id) {
            // Si existe, actualizar
            $stmt = $pdo->prepare("UPDATE stock_por_ciudad SET stock_actual = stock_actual + :cantidad WHERE id = :stock_id");
            $stmt->execute(['cantidad' => $cantidad, 'stock_id' => $stock_id]);
        } else {
            // Si no existe, insertar
            $stmt = $pdo->prepare("INSERT INTO stock_por_ciudad (producto_id, ciudad_id, stock_actual) VALUES (:producto_id, :ciudad_id, :stock_actual)");
            $stmt->execute(['producto_id' => $producto_id, 'ciudad_id' => $ciudad_id, 'stock_actual' => $cantidad]);
        }

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

        $pdo->commit();

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

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