<?php
header('Content-Type: application/json');
require_once 'db/config.php';

$response = ['success' => false, 'message' => 'Petición inválida.'];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $sede_id = isset($_POST['sede_id']) ? filter_var($_POST['sede_id'], FILTER_VALIDATE_INT) : null;
    $product_id = isset($_POST['product_id']) ? filter_var($_POST['product_id'], FILTER_VALIDATE_INT) : null;
    $cantidad = isset($_POST['cantidad']) ? filter_var($_POST['cantidad'], FILTER_VALIDATE_INT) : null;
    $borrador_id = isset($_POST['borrador_id']) ? filter_var($_POST['borrador_id'], FILTER_VALIDATE_INT) : null;

    if (!$sede_id || !$product_id || !$cantidad || $cantidad <= 0) {
        $response['message'] = 'Datos inválidos. Por favor, complete todos los campos correctamente.';
        echo json_encode($response);
        exit;
    }

    try {
        $pdo = db();
        $pdo->beginTransaction();

        // 1. Actualizar o insertar en stock_sedes
        $sql_stock = "INSERT INTO stock_sedes (product_id, sede_id, quantity) 
                      VALUES (:product_id, :sede_id, :quantity) 
                      ON DUPLICATE KEY UPDATE quantity = quantity + :quantity";
        
        $stmt_stock = $pdo->prepare($sql_stock);
        $stmt_stock->bindParam(':product_id', $product_id, PDO::PARAM_INT);
        $stmt_stock->bindParam(':sede_id', $sede_id, PDO::PARAM_INT);
        $stmt_stock->bindParam(':quantity', $cantidad, PDO::PARAM_INT);
        $stmt_stock->execute();

        // 2. Registrar el movimiento
        $sql_movement = "INSERT INTO stock_movements (product_id, sede_id, `type`, quantity, movement_date, borrador_id, metodo_registro) 
                         VALUES (:product_id, :sede_id, 'entrada', :quantity, NOW(), :borrador_id, 'Manual')";
        
        $stmt_movement = $pdo->prepare($sql_movement);
        $stmt_movement->bindParam(':product_id', $product_id, PDO::PARAM_INT);
        $stmt_movement->bindParam(':sede_id', $sede_id, PDO::PARAM_INT);
        $stmt_movement->bindParam(':quantity', $cantidad, PDO::PARAM_INT);
        $stmt_movement->bindParam(':borrador_id', $borrador_id, PDO::PARAM_INT);
        $stmt_movement->execute();

        $pdo->commit();

        $response['success'] = true;
        $response['message'] = "Se han añadido {$cantidad} unidades al stock correctamente.";

    } catch (PDOException $e) {
        if ($pdo->inTransaction()) {
            $pdo->rollBack();
        }
        // Log del error para depuración, no mostrar al usuario final
        error_log("Error en registrar_entrada_manual_api.php: " . $e->getMessage());
        $response['message'] = 'Error en la base de datos. No se pudo registrar la entrada.';
    }

} else {
    $response['message'] = 'Método no permitido.';
}

echo json_encode($response);
?>
