-- =====================================================================================
-- Admin 用户统计模块 - RPC 验证与调用样例
-- 说明: 本模块复用 analytics 模块的 RPC 函数，不重复定义。
--       本文件用于验证 RPC 可用性，并提供前端调用示例。
-- 依赖: public.rpc_analytics_user_kpis, rpc_analytics_user_growth_trend 等
-- =====================================================================================

-- 1) 验证 RPC 函数是否存在
SELECT routine_name, routine_type
FROM information_schema.routines
WHERE routine_schema = 'public'
  AND routine_name IN (
    'rpc_analytics_user_kpis',
    'rpc_analytics_user_growth_trend',
    'rpc_analytics_user_segments',
    'rpc_analytics_traffic_sources'
  )
ORDER BY routine_name;

-- 2) 调用样例：获取用户统计 KPI（最近 7 天）
-- 参数说明:
--   p_start_date: 起始日期 (DATE)
--   p_end_date:   结束日期 (DATE)
-- 返回字段:
--   total_users, user_growth, new_users, new_user_growth,
--   active_users, active_growth, ordering_users, ordering_growth,
--   paid_users, paid_growth, new_user_conversion_rate,
--   repurchase_rate, repurchase_growth
SELECT * FROM public.rpc_analytics_user_kpis(
  CURRENT_DATE - INTERVAL '6 days',
  CURRENT_DATE
);

-- 3) 调用样例：获取用户增长与活跃趋势（最近 30 天，日维度）
-- 参数说明:
--   p_start_date: 起始日期 (DATE)
--   p_end_date:   结束日期 (DATE)
-- 返回字段:
--   date, new_users, active_users
SELECT * FROM public.rpc_analytics_user_growth_trend(
  CURRENT_DATE - INTERVAL '29 days',
  CURRENT_DATE
)
ORDER BY date;

-- 4) 调用样例：获取用户分群（新客/复购/老客）
-- 参数说明:
--   p_start_date: 起始日期 (DATE)
--   p_end_date:   结束日期 (DATE)
-- 返回字段:
--   name, value
SELECT * FROM public.rpc_analytics_user_segments(
  CURRENT_DATE - INTERVAL '29 days',
  CURRENT_DATE
);

-- 5) 调用样例：获取渠道来源分布（基于注册来源）
-- 参数说明:
--   p_start_date: 起始日期 (DATE)
--   p_end_date:   结束日期 (DATE)
-- 返回字段:
--   name, value
SELECT * FROM public.rpc_analytics_traffic_sources(
  CURRENT_DATE - INTERVAL '29 days',
  CURRENT_DATE
)
ORDER BY value DESC;

-- 6) 综合验证：一次性调用所有 RPC 并检查返回是否正常
DO $$
DECLARE
  kpis RECORD;
  trend RECORD;
  seg RECORD;
  src RECORD;
BEGIN
  -- 验证 KPI RPC
  FOR kpis IN SELECT * FROM public.rpc_analytics_user_kpis(
    CURRENT_DATE - INTERVAL '6 days',
    CURRENT_DATE
  ) LIMIT 1
  LOOP
    RAISE NOTICE 'rpc_analytics_user_kpis OK: total_users=%, new_users=%, active_users=%',
      kpis.total_users, kpis.new_users, kpis.active_users;
  END LOOP;

  -- 验证趋势 RPC
  FOR trend IN SELECT * FROM public.rpc_analytics_user_growth_trend(
    CURRENT_DATE - INTERVAL '6 days',
    CURRENT_DATE
  ) LIMIT 1
  LOOP
    RAISE NOTICE 'rpc_analytics_user_growth_trend OK: date=%, new_users=%, active_users=%',
      trend.date, trend.new_users, trend.active_users;
  END LOOP;

  -- 验证分群 RPC
  FOR seg IN SELECT * FROM public.rpc_analytics_user_segments(
    CURRENT_DATE - INTERVAL '6 days',
    CURRENT_DATE
  ) LIMIT 3
  LOOP
    RAISE NOTICE 'rpc_analytics_user_segments OK: name=%, value=%',
      seg.name, seg.value;
  END LOOP;

  -- 验证渠道 RPC
  FOR src IN SELECT * FROM public.rpc_analytics_traffic_sources(
    CURRENT_DATE - INTERVAL '6 days',
    CURRENT_DATE
  ) LIMIT 3
  LOOP
    RAISE NOTICE 'rpc_analytics_traffic_sources OK: name=%, value=%',
      src.name, src.value;
  END LOOP;

  RAISE NOTICE '所有 RPC 验证通过。';
END $$;