-- =====================================================================================
-- 模拟多店铺环境：创建第二个商户和店铺，并将部分商品转移过去
-- =====================================================================================
DO $$
DECLARE
    v_merchant_1 UUID;
    v_merchant_2 UUID;
    v_shop_2_id UUID;
    v_user_email VARCHAR := 'test_merchant_2@example.com';
BEGIN
    -- 1. 获取已存在的第一个商户 (脚本生成的商品属于这个商户)
    SELECT id INTO v_merchant_1 FROM public.ak_users WHERE role = 'merchant' LIMIT 1;
    IF v_merchant_1 IS NULL THEN
        RAISE EXCEPTION '未找到任何商户用户，请先确保基础数据存在';
    END IF;

    -- 2. 查找或创建第二个商户
    -- 尝试找一个不是 v_merchant_1 的用户
    SELECT id INTO v_merchant_2 FROM public.ak_users WHERE id != v_merchant_1 LIMIT 1;
    
    -- 如果只有一个用户，我们需要"借用"这个身份或者提示用户
    -- 这里为了安全，如果只有一个用户，我们就不强行创建新用户了(因为涉及auth表)，
    -- 而是尝试将 ak_users 表里可能的普通用户角色临时改为 merchant 来演示
    IF v_merchant_2 IS NULL THEN
        -- 尝试找一个普通用户
        SELECT id INTO v_merchant_2 FROM public.ak_users WHERE role != 'merchant' LIMIT 1;
        
        IF v_merchant_2 IS NOT NULL THEN
             -- 升级为商户以便演示
             UPDATE public.ak_users SET role = 'merchant' WHERE id = v_merchant_2;
             RAISE NOTICE '已将用户 % 临时升级为商户以便演示多店铺', v_merchant_2;
        END IF;
    END IF;

    -- 如果实在找不到第二个用户，无法继续
    IF v_merchant_2 IS NULL THEN
        RAISE NOTICE '提示：系统中只有一个用户，无法模拟多店铺场景。请先注册第二个用户。';
        RETURN;
    END IF;

    -- 3. 确保第二个商户有店铺
    SELECT id INTO v_shop_2_id FROM public.ml_shops WHERE merchant_id = v_merchant_2 LIMIT 1;
    
    IF v_shop_2_id IS NULL THEN
        INSERT INTO public.ml_shops (merchant_id, shop_name, status, description)
        VALUES (v_merchant_2, '极客数码专营店', 1, '专注于数码产品配件')
        RETURNING id INTO v_shop_2_id;
        RAISE NOTICE '为第二个商户创建了店铺：极客数码专营店';
    ELSE
        UPDATE public.ml_shops SET shop_name = '极客数码专营店' WHERE id = v_shop_2_id;
    END IF;

    -- 4. 将部分商品转移到第二个店铺
    -- 转移 "数码配件(ACC)" 和 "图书(BOOK)" 类商品
    UPDATE public.ml_products 
    SET merchant_id = v_merchant_2 
    WHERE product_code LIKE 'ACC%' OR product_code LIKE 'BOOK%';
    
    RAISE NOTICE '已将 [数码配件] 和 [图书文娱] 类商品转移到第二个店铺。';
    RAISE NOTICE '现在购物车中添加这些商品应该会显示在不同的分组下。';

END $$;
