/**
 * 认证相关API接口（小程序版本 - 使用模拟数据）
 */

// 模拟用户数据库
const users = new Map()

// 模拟验证码存储 (phone -> {code, expireTime})
const smsCodes = new Map()

// 模拟本机号码（实际开发中应该通过运营商API获取）
const MOCK_PHONE_NUMBER = '18138887353'

// 生成6位随机验证码
function generateSmsCode() {
	return Math.random().toString().substr(2, 6)
}

// 验证手机号格式
function validatePhone(phone) {
	const phoneRegex = /^1[3-9]\d{9}$/
	return phoneRegex.test(phone)
}

// 检查验证码是否有效
function isValidSmsCode(phone, code) {
	const smsData = smsCodes.get(phone)
	if (!smsData) return false
	
	const now = Date.now()
	const expired = now > smsData.expireTime
	
	if (expired) {
		smsCodes.delete(phone)
		return false
	}
	
	return smsData.code === code
}

// 模拟网络延迟
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms))

// 获取本机号码
export const getPhoneNumber = async () => {
	await delay(500) // 模拟网络延迟
	
	console.log('模拟API: 获取本机号码')
	
	return {
		code: 200,
		message: '获取成功',
		data: {
			phone: MOCK_PHONE_NUMBER,
			maskedPhone: `${MOCK_PHONE_NUMBER.slice(0, 3)}****${MOCK_PHONE_NUMBER.slice(-4)}`
		}
	}
}

// 发送验证码
export const sendSmsCode = async (phone) => {
	await delay(800) // 模拟网络延迟
	
	console.log('模拟API: 发送验证码', { phone })
	
	// 验证手机号格式
	if (!validatePhone(phone)) {
		throw new Error('手机格式不正确')
	}
	
	// 生成验证码
	const code = generateSmsCode()
	const expireTime = Date.now() + 10 * 60 * 1000 // 10分钟有效期
	
	// 存储验证码
	smsCodes.set(phone, { code, expireTime })
	
	console.log(`模拟API: 验证码已发送到 ${phone}: ${code}`)
	
	return {
		code: 200,
		message: '验证码发送成功',
		data: {
			phone,
			// 开发阶段返回验证码，生产环境不应返回
			debugCode: code
		}
	}
}

// 验证码登录
export const smsLogin = async (phone, code) => {
	await delay(1000) // 模拟网络延迟
	
	console.log('模拟API: 验证码登录', { phone, code })
	
	// 验证手机号格式
	if (!validatePhone(phone)) {
		throw new Error('手机格式不正确')
	}
	
	// 验证验证码
	if (!isValidSmsCode(phone, code)) {
		throw new Error('验证码错误')
	}
	
	// 检查用户是否存在
	let user = users.get(phone)
	const isNewUser = !user
	
	if (isNewUser) {
		// 新用户自动注册
		user = {
			id: 'user_' + Date.now(),
			phone,
			nickname: `用户${phone.slice(-4)}`,
			avatar: '',
			registerTime: Date.now(),
			lastLoginTime: Date.now()
		}
		users.set(phone, user)
		console.log('模拟API: 新用户注册', user)
	} else {
		// 老用户更新最近登录时间
		user.lastLoginTime = Date.now()
		users.set(phone, user)
		console.log('模拟API: 老用户登录', user)
	}
	
	// 清除使用过的验证码
	smsCodes.delete(phone)
	
	// 生成token
	const token = 'token_' + Date.now() + '_' + Math.random().toString(36).substr(2)
	
	return {
		code: 200,
		message: isNewUser ? '注册登录成功' : '登录成功',
		data: {
			token,
			user,
			isNewUser
		}
	}
}

// 一键登录
export const oneClickLogin = async (phone) => {
	await delay(1200) // 模拟网络延迟
	
	console.log('模拟API: 一键登录', { phone })
	
	// 验证手机号格式
	if (!validatePhone(phone)) {
		throw new Error('手机格式不正确')
	}
	
	// 检查用户是否存在
	let user = users.get(phone)
	const isNewUser = !user
	
	if (isNewUser) {
		// 新用户自动注册
		user = {
			id: 'user_' + Date.now(),
			phone,
			nickname: `用户${phone.slice(-4)}`,
			avatar: '',
			registerTime: Date.now(),
			lastLoginTime: Date.now()
		}
		users.set(phone, user)
		console.log('模拟API: 一键登录新用户注册', user)
	} else {
		// 老用户更新最近登录时间
		user.lastLoginTime = Date.now()
		users.set(phone, user)
		console.log('模拟API: 一键登录老用户', user)
	}
	
	// 生成token
	const token = 'token_' + Date.now() + '_' + Math.random().toString(36).substr(2)
	
	return {
		code: 200,
		message: isNewUser ? '注册登录成功' : '登录成功',
		data: {
			token,
			user,
			isNewUser
		}
	}
}

// 检查登录状态
export const checkLoginStatus = async (token) => {
	await delay(300) // 模拟网络延迟
	
	console.log('模拟API: 检查登录状态', { token })
	
	if (!token) {
		throw new Error('未登录')
	}
	
	// 简单的token验证（实际项目中应该更复杂）
	return {
		code: 200,
		message: '已登录',
		data: {
			valid: true
		}
	}
}

// 获取用户信息
export const getUserInfo = async () => {
	await delay(400) // 模拟网络延迟
	
	console.log('模拟API: 获取用户信息')
	
	const token = uni.getStorageSync('userToken')
	if (!token) {
		throw new Error('未登录')
	}
	
	// 返回模拟用户信息
	return {
		code: 200,
		message: '获取成功',
		data: {
			id: 'user_' + Date.now(),
			phone: MOCK_PHONE_NUMBER,
			nickname: `用户${MOCK_PHONE_NUMBER.slice(-4)}`,
			avatar: '',
			registerTime: Date.now() - 30 * 24 * 60 * 60 * 1000, // 30天前注册
			lastLoginTime: Date.now()
		}
	}
}
