/**
 * 邀请码缓存管理工具
 * 用于处理邀请链接中的邀请码参数，存储到 localStorage，并在注册/Google登录时使用
 */

const REFERRAL_CODE_KEY = 'sofio_referral_code';

/**
 * 从 URL 参数中获取邀请码并存入缓存
 * @returns 邀请码（如果有）
 */
export function captureReferralCodeFromUrl(): string | null {
  if (typeof window === 'undefined') return null;

  const urlParams = new URLSearchParams(window.location.search);
  const refCode = urlParams.get('ref');

  if (refCode && refCode.trim()) {
    // 存入缓存
    localStorage.setItem(REFERRAL_CODE_KEY, refCode.trim());
    return refCode.trim();
  }

  return null;
}

/**
 * 获取缓存的邀请码
 * @returns 邀请码或 null
 */
export function getCachedReferralCode(): string | null {
  if (typeof window === 'undefined') return null;
  return localStorage.getItem(REFERRAL_CODE_KEY);
}

/**
 * 设置缓存的邀请码
 * @param code 邀请码
 */
export function setCachedReferralCode(code: string): void {
  if (typeof window === 'undefined') return;
  localStorage.setItem(REFERRAL_CODE_KEY, code);
}

/**
 * 清除缓存的邀请码
 */
export function clearCachedReferralCode(): void {
  if (typeof window === 'undefined') return;
  localStorage.removeItem(REFERRAL_CODE_KEY);
}

/**
 * 检查是否有缓存的邀请码（从 URL 或 localStorage）
 * 优先检查 URL 参数，如果有则更新缓存
 * @returns 邀请码或 null
 */
export function getReferralCode(): string | null {
  // 先检查 URL 参数
  const urlCode = captureReferralCodeFromUrl();
  if (urlCode) {
    return urlCode;
  }

  // 再检查缓存
  return getCachedReferralCode();
}
