-- =====================================================
-- 分享免单通知消息 - 数据库执行语句
-- =====================================================

-- 1. 添加分享免单相关的通知类型说明
-- ml_notifications 表的 type 字段可包含以下类型:
-- 'system' - 系统通知
-- 'promotion' - 优惠活动
-- 'order' - 订单通知
-- 'share_free' - 分享免单通知 (新增)

-- 2. 创建分享免单通知的函数
-- 当分享免单成功时，自动发送通知给用户
CREATE OR REPLACE FUNCTION notify_share_free_success(
  p_user_id UUID,
  p_share_record_id UUID,
  p_product_name VARCHAR,
  p_reward_amount DECIMAL(10,2),
  p_share_code VARCHAR
)
RETURNS VOID AS $$
BEGIN
  INSERT INTO ml_notifications (
    user_id,
    type,
    title,
    content,
    icon_url,
    link_url,
    extra_data,
    created_at
  ) VALUES (
    p_user_id,
    'share_free',
    '恭喜！您已获得免单奖励',
    '您分享的商品【' || p_product_name || '】已有4位好友购买，获得免单奖励 ¥' || p_reward_amount || '！分享码：' || p_share_code,
    '/static/icons/gift.png',
    '/pages/mall/consumer/share/detail?id=' || p_share_record_id,
    jsonb_build_object(
      'share_record_id', p_share_record_id,
      'product_name', p_product_name,
      'reward_amount', p_reward_amount,
      'share_code', p_share_code
    ),
    NOW()
  );
END;
$$ LANGUAGE plpgsql;

-- 3. 创建二级购买进度通知函数
-- 当有人通过分享码购买时，发送进度通知
CREATE OR REPLACE FUNCTION notify_share_purchase_progress(
  p_user_id UUID,
  p_share_record_id UUID,
  p_product_name VARCHAR,
  p_current_count INT,
  p_required_count INT,
  p_share_code VARCHAR
)
RETURNS VOID AS $$
BEGIN
  INSERT INTO ml_notifications (
    user_id,
    type,
    title,
    content,
    icon_url,
    link_url,
    extra_data,
    created_at
  ) VALUES (
    p_user_id,
    'share_free',
    '分享免单进度更新',
    '您分享的商品【' || p_product_name || '】已有 ' || p_current_count || '/' || p_required_count || ' 人购买，再邀请 ' || (p_required_count - p_current_count) || ' 人即可免单！',
    '/static/icons/share.png',
    '/pages/mall/consumer/share/detail?id=' || p_share_record_id,
    jsonb_build_object(
      'share_record_id', p_share_record_id,
      'product_name', p_product_name,
      'current_count', p_current_count,
      'required_count', p_required_count,
      'share_code', p_share_code
    ),
    NOW()
  );
END;
$$ LANGUAGE plpgsql;

-- 4. 创建分享创建成功通知函数
-- 当用户创建分享时，发送确认通知
CREATE OR REPLACE FUNCTION notify_share_created(
  p_user_id UUID,
  p_share_record_id UUID,
  p_product_name VARCHAR,
  p_share_code VARCHAR
)
RETURNS VOID AS $$
BEGIN
  INSERT INTO ml_notifications (
    user_id,
    type,
    title,
    content,
    icon_url,
    link_url,
    extra_data,
    created_at
  ) VALUES (
    p_user_id,
    'share_free',
    '分享创建成功',
    '您已成功分享商品【' || p_product_name || '】，分享码：' || p_share_code || '。邀请4位好友购买即可免单！',
    '/static/icons/share-success.png',
    '/pages/mall/consumer/share/detail?id=' || p_share_record_id,
    jsonb_build_object(
      'share_record_id', p_share_record_id,
      'product_name', p_product_name,
      'share_code', p_share_code
    ),
    NOW()
  );
END;
$$ LANGUAGE plpgsql;

-- 5. 示例：手动插入测试通知（可选）
-- 替换 'YOUR_USER_ID' 为实际用户ID
-- INSERT INTO ml_notifications (user_id, type, title, content, icon_url, link_url, extra_data, created_at)
-- VALUES (
--   'YOUR_USER_ID',
--   'share_free',
--   '恭喜！您已获得免单奖励',
--   '您分享的商品【测试商品】已有4位好友购买，获得免单奖励 ¥99.00！分享码：ABCD1234',
--   '/static/icons/gift.png',
--   '/pages/mall/consumer/share/detail?id=test-share-id',
--   '{"share_record_id": "test-share-id", "product_name": "测试商品", "reward_amount": 99.00, "share_code": "ABCD1234"}',
--   NOW()
-- );

-- 6. 查询用户分享免单相关通知
-- SELECT * FROM ml_notifications 
-- WHERE type = 'share_free' 
-- ORDER BY created_at DESC;
