import {
	setUserToken,
	getUserToken,
	removeUserToken,
	setUser_Uid,
	getUserUid,
	removeUserUid,
	setUserPhone,
	getUserPhone,
	removeUserPhone,
	setUserOpenid,
	getUserOpenid,
	removeUserOpenid
} from '@/utils/userAuth.uts'

import type { GetUserInfoApiParam,GetUserInfoApiResponse } from '@/api/youhujun/user/after-login/getUserInfo-type.uts'
import  { getUserInfo } from '@/api/youhujun/user/after-login/getUserInfo.uts'
import { VITE_APP_TABBAR_HOME_PAGE} from '@/config/page-setting.uts'
type PreLoginRoute = {
	url:string,
	type:string
}

type UserState = {
	token: string,
	phone: string,
	openid:string,
	user_uid:number,
	real_auth_status:number,
	currentRole: string,
	roles:string[],
	introduction:string,
	nickName:string,
	avatar:string,
	created_at:string,
	sex:number,
	loginProvider:string ,
	isUniverifyLogin:boolean,
	preLoginRoute:PreLoginRoute
	
}

export const userState = reactive({
	token:getUserToken(),
	phone:getUserPhone(),
	openid:getUserOpenid(),
	user_uid:getUserUid(),
	real_auth_status:0,
	currentRole:'',
	roles:[],
	introduction:'',
	nickName:'',
	avatar:'',
	created_at:'',
	sex:0,
	loginProvider:'',
	isUniverifyLogin:false,
	//记录登录前的原跳转目标
	preLoginRoute: {
	  url: '', // 原跳转的url(如:/pages/home/index)
	  type: '' // 原导航类型:navigateTo / switchTab
	}
	
} as UserState)

export const setToken = (token:string)=>{
	setUserToken(token)
	userState.token = token
}

export const setUserUid = (user_uid:number)=>{
	setUser_Uid(user_uid)
	userState.user_uid = user_uid
}

export const setPhone = (phone:string)=>{
	setUserPhone(phone)
	userState.phone = phone
}

export const setOpenid = (openid:string)=>{
	setUserOpenid(openid)
	userState.openid = openid
}

export const setRealAuthStatus = (real_auth_status:number)=>{
	userState.real_auth_status = real_auth_status
}

export const setCurrentRole = (currentRole:string)=>{
	userState.currentRole = currentRole
}

export const setRoles = (roles:string[])=>{
	userState.roles = roles
}

export const setIntroduction = (introduction:string)=>{
	userState.introduction = introduction
}

export const setNickName = (nickName:string)=>{
	userState.nickName = nickName
}

export const setAvatar = (avatar:string)=>{
	userState.avatar = avatar
}

export const setCreatedAt = (created_at:string)=>{
	userState.created_at = created_at
}

export const setSex = (sex:number)=>{
	userState.sex = sex
}

export const setLoginProvider = (loginProvider:string)=>{
	userState.loginProvider = loginProvider
}

export const setIsUniverifyLogin = (isUniverifyLogin:boolean)=>{
	userState.isUniverifyLogin = isUniverifyLogin
}

// 记录登录前的跳转目标
export const setPreLoginRoute = (url: string, type: string)=>{
	userState.preLoginRoute = { url,type}
}
 // 清空原跳转目标(跳转后调用)
export const clearPreLoginRoute = ()=>{
	userState.preLoginRoute = { url: '', type: '' };
}

// 重置用户状态(退出登录时使用)
export const resetUserState = () => {
	userState.token = ''
	userState.user_uid = 0
	userState.phone = ''
	userState.openid = ''
	userState.real_auth_status = 0
	userState.currentRole = ''
	userState.roles = []
	userState.introduction = ''
	userState.nickName = ''
	userState.avatar = ''
	userState.created_at = ''
	userState.sex = 0
	userState.loginProvider = ''
	userState.isUniverifyLogin = false
	removeUserToken()
	removeUserPhone()
	removeUserOpenid()
	removeUserUid()
	//退出后回首页
	uni.switchTab({
		url:VITE_APP_TABBAR_HOME_PAGE
	})
}

//获取用户信息
export const getUserSatateInfo = async ()=>{
	const param:GetUserInfoApiParam = {
		openid_type:10
	}
	const result: GetUserInfoApiResponse|null = await getUserInfo(param)
	
	if(result){
		const {code,data} = result
		if(code == 0){
			const {introduction,avatar,name,roles,phone,created_at,sex,real_auth_status,openid} = data
			if(phone){
				setPhone(phone)
			}
			if(openid){
				setOpenid(openid)
			}
			if(introduction){
				setIntroduction(introduction)
			}
			if(avatar){
				setAvatar(avatar)
			}
			if(name){
				setNickName(name)
			}
			if(roles){
				setRoles(roles)
			}
			
			if(created_at){
				setCreatedAt(created_at)
			}
			if(sex){
				setSex(sex||0)
			}
			if(real_auth_status){
				setRealAuthStatus(real_auth_status)
			}
		}
	}
}

// 获取 Token(便捷方法)
export const getToken = () => {
	return userState.token
}