export function sanitizeAuthRedirect(target: string | null | undefined, fallback: string = '/dashboard'): string {
  const value = (target || '').trim()
  if (!value.startsWith('/') || value.startsWith('//')) {
    return fallback
  }
  return value
}

// 可信的 OAuth 提供商 origin 白名单
const TRUSTED_OAUTH_ORIGINS = new Set([
  // 社交登录提供商
  'https://github.com',
  'https://google.com',
  'https://facebook.com',
  'https://twitter.com',
  'https://apple.com',
  'https://weixin.qq.com',
  'https://qq.com',
  'https://alipay.com',
  'https://douyin.com',
  // 测试/开发域名
  'https://oauth.example.com',
])

/**
 * 验证 OAuth 授权 URL 的 origin 是否可信
 * 防止开放重定向攻击
 */
export function validateOAuthUrl(authUrl: string): boolean {
  try {
    const url = new URL(authUrl)

    // 允许同源（当前应用自身作为 OAuth 提供者的情况）
    if (url.origin === window.location.origin) {
      return true
    }

    // 检查是否在可信 origin 白名单中
    if (TRUSTED_OAUTH_ORIGINS.has(url.origin)) {
      return true
    }

    // 拒绝所有其他 origin
    return false
  } catch {
    // 无效的 URL 格式
    return false
  }
}

export function buildOAuthCallbackReturnTo(redirectPath: string): string {
  const callbackUrl = new URL('/login/oauth/callback', window.location.origin)
  if (redirectPath && redirectPath !== '/dashboard') {
    callbackUrl.searchParams.set('redirect', redirectPath)
  }
  return callbackUrl.toString()
}

export function parseOAuthCallbackHash(hash: string): Record<string, string> {
  const normalized = hash.startsWith('#') ? hash.slice(1) : hash
  const values = new URLSearchParams(normalized)

  return {
    status: values.get('status') || '',
    code: values.get('code') || '',
    provider: values.get('provider') || '',
    message: values.get('message') || '',
  }
}
