/**
 * 邀请参数解析测试工具
 */

import { parseInviteParams } from './invite'

/**
 * 测试不同格式的邀请参数解析
 */
export function testInviteParamsParsing() {
  console.log('=== 开始测试邀请参数解析 ===')
  
  // 测试用例1: uid_格式
  const testCase1 = {
    scene: 'uid_33103',
    path: 'pages/index/index'
  }
  console.log('测试用例1 - uid格式:')
  console.log('输入:', testCase1)
  const result1 = parseInviteParams(testCase1)
  console.log('输出:', result1)
  console.log('预期: { inviter: "33103", source: "qrcode", t: "..." }')
  console.log('结果:', result1?.inviter === '33103' && result1?.source === 'qrcode' ? '✅ 通过' : '❌ 失败')
  console.log('')

  // 测试用例2: 传统格式
  const testCase2 = {
    scene: 'inviter=12345&source=share&t=1640995200000',
    path: 'pages/index/index'
  }
  console.log('测试用例2 - 传统格式:')
  console.log('输入:', testCase2)
  const result2 = parseInviteParams(testCase2)
  console.log('输出:', result2)
  console.log('预期: { inviter: "12345", source: "share", t: "1640995200000" }')
  console.log('结果:', result2?.inviter === '12345' && result2?.source === 'share' ? '✅ 通过' : '❌ 失败')
  console.log('')

  // 测试用例3: 数字类型的scene
  const testCase3 = {
    scene: 1047, // 数字类型
    path: 'pages/index/index'
  }
  console.log('测试用例3 - 数字类型scene:')
  console.log('输入:', testCase3)
  const result3 = parseInviteParams(testCase3)
  console.log('输出:', result3)
  console.log('预期: null (因为不是uid_格式)')
  console.log('结果:', result3 === null ? '✅ 通过' : '❌ 失败')
  console.log('')

  // 测试用例4: 空参数
  const testCase4 = {}
  console.log('测试用例4 - 空参数:')
  console.log('输入:', testCase4)
  const result4 = parseInviteParams(testCase4)
  console.log('输出:', result4)
  console.log('预期: null')
  console.log('结果:', result4 === null ? '✅ 通过' : '❌ 失败')
  console.log('')

  // 测试用例5: 无效的uid格式
  const testCase5 = {
    scene: 'uid_abc',
    path: 'pages/index/index'
  }
  console.log('测试用例5 - 无效uid格式:')
  console.log('输入:', testCase5)
  const result5 = parseInviteParams(testCase5)
  console.log('输出:', result5)
  console.log('预期: null (因为abc不是数字)')
  console.log('结果:', result5 === null ? '✅ 通过' : '❌ 失败')
  console.log('')

  // 测试用例6: referrer参数
  const testCase6 = {
    referrer: '99999',
    path: 'pages/index/index'
  }
  console.log('测试用例6 - referrer参数:')
  console.log('输入:', testCase6)
  const result6 = parseInviteParams(testCase6)
  console.log('输出:', result6)
  console.log('预期: { inviter: "99999", source: "link" }')
  console.log('结果:', result6?.inviter === '99999' && result6?.source === 'link' ? '✅ 通过' : '❌ 失败')
  console.log('')

  console.log('=== 邀请参数解析测试完成 ===')
}

/**
 * 模拟小程序启动场景测试
 */
export function simulateMiniProgramLaunch() {
  console.log('=== 模拟小程序启动场景 ===')
  
  // 模拟通过小程序码启动
  const qrcodeOptions = {
    path: 'pages/index/index',
    scene: 'uid_33103',
    shareTicket: undefined,
    referrerInfo: {}
  }
  
  console.log('模拟小程序码启动:')
  console.log('启动参数:', qrcodeOptions)
  
  const qrcodeResult = parseInviteParams(qrcodeOptions)
  console.log('解析结果:', qrcodeResult)
  
  if (qrcodeResult && qrcodeResult.inviter === '33103') {
    console.log('✅ 小程序码邀请解析成功')
    return qrcodeResult
  } else {
    console.log('❌ 小程序码邀请解析失败')
    return null
  }
}

/**
 * 验证邀请参数格式
 */
export function validateInviteParams(params: any) {
  console.log('=== 验证邀请参数格式 ===')
  console.log('参数:', params)
  
  if (!params) {
    console.log('❌ 参数为空')
    return false
  }
  
  if (!params.inviter) {
    console.log('❌ 缺少inviter字段')
    return false
  }
  
  if (isNaN(parseInt(params.inviter))) {
    console.log('❌ inviter不是有效数字')
    return false
  }
  
  if (!params.source) {
    console.log('❌ 缺少source字段')
    return false
  }
  
  console.log('✅ 邀请参数格式验证通过')
  return true
}

/**
 * 运行所有测试
 */
export function runAllTests() {
  console.log('🚀 开始运行所有邀请参数测试')
  
  testInviteParamsParsing()
  
  const simulationResult = simulateMiniProgramLaunch()
  
  if (simulationResult) {
    validateInviteParams(simulationResult)
  }
  
  console.log('🎉 所有测试完成')
}
