import {
	post,
	get,
	postL
} from '@/utils/http'
import {
	trans
} from './base'
import {
	SERVICE_URL,
	WX_APP_ID
} from '@/utils/config'
import store from '@/store'
import {
	SET_THIRD,
	SET_TOKEN,
	SET_USER_INFO,
	SET_HIDE
} from '@/store/mutation-types'
import cache from '../utils/cache'

export default {
	apis: {
		WX_SESSION: SERVICE_URL + '/api/wechatMa/getSessionInfo',
		Login: SERVICE_URL + '/api/wechatMa/loginV2',
		MOBILE_BIND: SERVICE_URL + '/api/wechatMa/bindUserPhone',
		USER_INFO: SERVICE_URL + '/api/myProfile/get',
		USER_UPDATE: SERVICE_URL + '/api/myProfile/basicInfo/update',
		UPDATE_AVATAR: SERVICE_URL + '/api/myProfile/avatar/update',
		UPDATE_NICKNAME: SERVICE_URL + '/api/myProfile/nickname/update',
		USER_COMPLETE_BIND: SERVICE_URL + '/api/wechatMa/bindUserInfo',

		REAL_NAME_APPLY: SERVICE_URL + '/api/authentication/submit',
		GETHIDE: SERVICE_URL + '/api/luckOrder/hide'
	},
	async updateSession(code, loading) {
		const res = await trans(post(this.apis.WX_SESSION, {
			code
		}, {
			loading
		}))
		if (res.data && res.data.session) {
			store.commit(SET_THIRD, res.data.session)
		}
		return res.success
	},
	async login(encryptedData, iv, session) {
		const res = await trans(
			postL(this.apis.Login, {
				encryptedData,
				iv,
				sessionKey: session.sessionKey,
				session
			})
		)
		if (!res.success) {
			return false
		}
		store.commit(SET_TOKEN, res.data.tokenInfo.tokenValue)
		return {
			needInfo: res.data.needPerfectProfile,
			token: res.data.tokenInfo.tokenValue
		}
	},
	async getInfo() {
		const res = await trans(get(this.apis.USER_INFO))

		return res.data
	},
	async info() {
		const res = await trans(get(this.apis.USER_INFO))
		if (res.success) {
			store.commit(SET_USER_INFO, res.data)
		}
		return res.success
	},
	async bindMobile(param) {
		param.sessionKey = store.state.sessionKey
		const res = await trans(postL(this.apis.MOBILE_BIND, param))
		return res.success
	},
	async complete(encryptedData, iv, signature, rawData) {
		let param = {
			encryptedData,
			iv,
			sessionKey: store.state.sessionKey,
			signature,
			rawData
		}
		const res = await trans(postL(this.apis.USER_COMPLETE_BIND, param))
		return res.success
	},
	async realNameApply(idName, idNum) {
		const res = await trans(postL(this.apis.REAL_NAME_APPLY, {
			idName,
			idNum
		}))
		return res.success
	},
	async updateInfo(nickname, avatar) {
		const res = await trans(postL(this.apis.USER_UPDATE, {
			nickname,
			avatar
		}))
		return res.success
	},
	async updateAvatar(avatar) {
		const res = await trans(postL(this.apis.UPDATE_AVATAR, {
			avatar
		}))
		return res.success
	},
	async updateNickname(nickname) {
		const res = await trans(postL(this.apis.UPDATE_NICKNAME, {
			nickname
		}))
		return res.success
	},
	async getHide() {
		const res = await trans(get(this.apis.GETHIDE))
		// 1: 没消费，0 ：消费
		store.commit(SET_HIDE, res.data)
		return res.success
	},
	async getVerifycode(param) {
		const res = await trans(postL(SERVICE_URL + '/api/verifycode/send', param))

		return res.success
	},
	async accountLogin(param) {
		const res = await trans(postL(SERVICE_URL + '/api/account/login', param))
		if (!res.success) {
			return false
		}
		store.commit(SET_TOKEN, res.data.tokenInfo.tokenValue)
		return res.success
	},
	async getParamConfig(code) {
		const res = await trans(get(SERVICE_URL + '/param/paramConfig', {
			code
		}))
		return res.data
	},
	async logoff() {
		const res = await trans(postL(SERVICE_URL + '/api/removeAccount/submit'))
		return res.success
	}
}