import { finishzhuce, huoquyanzhengma, login, getpeoplemessage, removelogin } from "@/api/login"

// 调用永久存储token的函数
import { setToken, getToken, removeToken } from "@/utils/token"
const state = {
	// 验证码
	code: "",
	// token : 一旦刷新就没有了 就需要调用localStorage.getItem("TOKEN")再次获取
	token: getToken(),
	// token返回的用户信息
	peoplemessage: {}
}

const mutations = {
	// 验证码
	GETYANZHENGMA(state, code) {
		state.code = code
	},
	// 登录成功返回的信息  一般只返回一个token
	denglumessage(state, token) {
		state.token = token
	},
	// 根据token获取用户信息
	PEOPLEMESSAGE(state, peoplemessage) {
		state.peoplemessage = peoplemessage
	},
	// 清除vuex中的用户信息
	CLEAR(state) {
		state.token = ''
		state.peoplemessage = {}
		// 清除本地存储token
		removeToken()
	}
}

const actions = {
	// 获取验证码 结果返回到用户手机上
	async getyanzhengma({ commit }, phone) {
		// await后面是一个promise函数
		let result = await huoquyanzhengma(phone)
		// 自定义resolve
		if (result.code == 200) {
			commit("GETYANZHENGMA", result.data)
			return result.data
		} else {
			// 自定义reject
			return Promise.reject(new Error("失败"))
		}
	},
	// 获取phone,code.password完成用户注册
	async finishzhuce({ commit }, params) {
		let result = await finishzhuce(params)
		if (result.code == 200) {
			return "用户注册成功"
		} else {
			return Promise.reject(new Error("faile"))
		}
	},
	// 根据账号和密码登录
	async denglu({ commit }, params) {
		let result = await login(params)
		commit("denglumessage", result.data.token)
		// 自定义返回的Promise成功和失败的函数
		if (result.code == 200) {
			// 一旦登录成功就永久存储token
			setToken(result.data.token)
			return "登录成功"
		} else {
			return Promise.reject(new Error("登录失败"))
		}
	},
	// 请求拦截器携带token获取用户信息
	async getpeoplemessage({ commit }) {
		let result = await getpeoplemessage()
		if (result.code == 200) {
			commit("PEOPLEMESSAGE", result.data)
			console.log(result);
			return "token获取用户信息成功"
		} else {
			return Promise.reject(new Error("token获取用户信息失败"))
		}
	},
	// 退出登录
	async removelogin({ commit }) {
		// 只是向服务器请求,清除token
		// 本地存储的token和vuex里面的用户信息都要删
		let result = await removelogin()
		if (result.code == 200) {
			// action中不能修改state，要交给mutations  只能通过context进行调用
			commit("CLEAR")
			return '退出登录成功'
		} else {
			return Promise.reject(new Error("退出登录失败"))
		}
	},

}

const getters = {}

export default {
	state,
	mutations,
	actions,
	getters
}