-- Создание резервов для всех позиций заказов без резервов
SET search_path TO grach;

-- Проверяем наличие активного склада
DO $$
DECLARE
    warehouse_id_val INT;
    created_count INT := 0;
BEGIN
    -- Получаем ID активного склада (если есть)
    SELECT id INTO warehouse_id_val
    FROM grach.inventory_warehouse
    WHERE is_active = true
    LIMIT 1;

    IF warehouse_id_val IS NULL THEN
        RAISE NOTICE 'WARNING: Нет активного склада, резервы будут созданы без склада';
    ELSE
        RAISE NOTICE 'Используем склад ID: %', warehouse_id_val;
    END IF;

    -- Создаем резервы для всех позиций без резервов
    INSERT INTO grach.inventory_reservation (
        order_item_id,
        product_id,
        warehouse_id,
        quantity,
        status,
        reserved_at,
        released_at,
        converted_at
    )
    SELECT
        oi.id,
        COALESCE(oi.product_id, oi.product_kit_id),
        warehouse_id_val,
        oi.quantity,
        'reserved',
        CURRENT_TIMESTAMP,
        NULL,
        NULL
    FROM grach.orders_orderitem oi
    LEFT JOIN grach.inventory_reservation r ON r.order_item_id = oi.id
    WHERE r.id IS NULL  -- Только позиции без резервов
      AND (oi.product_id IS NOT NULL OR oi.product_kit_id IS NOT NULL)  -- Есть товар
    ON CONFLICT DO NOTHING;

    GET DIAGNOSTICS created_count = ROW_COUNT;

    RAISE NOTICE 'Создано резервов: %', created_count;
END $$;

-- Проверяем результат
SELECT
    COUNT(*) as total_items,
    COUNT(r.id) as items_with_reservations,
    COUNT(*) - COUNT(r.id) as items_without_reservations
FROM grach.orders_orderitem oi
LEFT JOIN grach.inventory_reservation r ON r.order_item_id = oi.id;
