import Vue from 'vue'
import { _API_AppMessage } from '@/apis/app.js'
import { deepClone } from '@/common/util/index.js'

const getPreviewText = item => {
	let status;
	switch (+item.status) {
	    case 0: status = "下单"; break;
	    case 1: status = "发货"; break;
	    case 2: status = "收货"; break;
	}
	return `恭喜您！您有一份价值 ${item.goodList.reduce((t, e) => t + (+e.num * +e.price), 0)} 元的订单已经${status}成功！`
}

export default {
	namespaced: true,
	state: {
		system: [], // 未读消息列表
		myOrder: [], // 未读消息列表
		downOrder: [], // 未读消息列表
		systemLocal: uni.getStorageSync('systemLocal') ? JSON.parse(uni.getStorageSync('systemLocal')) : [], // 从本地存储中读取以缓存的消息
		myOrderLocal: uni.getStorageSync('myOrderLocal') ? JSON.parse(uni.getStorageSync('myOrderLocal')) : [], // 从本地存储中读取以缓存的消息
		downOrderLocal: uni.getStorageSync('downOrderLocal') ? JSON.parse(uni.getStorageSync('downOrderLocal')) : [], // 从本地存储中读取以缓存的消息
	},
	getters: {
		messageNum: state => { // 计算未读消息数量
			return state.system.length + state.myOrder.length + state.downOrder.length
		},
		systemMessageNum: state => { // 计算未读系统消息数量
			return state.system.length
		},
		orderMessageNum: state => { // 计算未读订单消息数量
			return state.myOrder.length + state.downOrder.length
		},
		downOrderMessageNum: state => { // 计算未读下级订单消息数量
			return state.downOrder.length
		},
		previewOrderMessage: state => { // 消息通知页面 订单通知预览文字
			if (state.myOrder.length) { // 如果有未读消息，显示未读消息
				return getPreviewText(state.myOrder[0])
			} else if (state.downOrder.length) { 
				return '恭喜您！您有一份新的下级订单等待确认！'
			} else if (state.myOrderLocal.length) { // 如果没有未读消息，显示本地消息
				return getPreviewText(state.myOrderLocal[0])
			} else if (state.downOrderLocal.length) {
				return '恭喜您！您有一份新的下级订单等待确认！'
			} else {
				return '暂无消息'
			}
		},
		previewSystemMessage: state => { // 消息通知页面 系统通知预览文字
			if (state.system.length) { // 如果有未读消息，显示未读的系统消息
				return `${state.system[0].title} ${state.system[0].message}`
			} else if (state.systemLocal.length) { // 如果没有未读消息，显示本地的系统消息
				return `${state.systemLocal[0].title} ${state.systemLocal[0].message}`
			} else {
				return '暂无消息'
			}
		},
	},
	mutations: {
		readMessage(state, payload) { // 将某条订单消息标记为已读（标记本地消息状态）
			if (payload.type === 2) {
				const item = deepClone(state.myOrderLocal[payload.index])
				item.readed = true
				Vue.set(state.myOrderLocal, payload.index, item)
				uni.setStorageSync('myOrderLocal', JSON.stringify(state.myOrderLocal)) // 缓存消息
			} else if (payload.type === 3) {
				const item = deepClone(state.downOrderLocal[payload.index])
				item.readed = true
				Vue.set(state.downOrderLocal, payload.index, item)
				uni.setStorageSync('downOrderLocal', JSON.stringify(state.downOrderLocal)) // 缓存消息
			}
		},
		setStorage(state, index) { // 批量设置消息已读（清除服务器未读消息队列）
			if (index === 1) {
				state.systemLocal = [...state.system, ...state.systemLocal] // 将未读消息放入已读消息列表
				state.system = [] // 将未读消息清空
				uni.setStorageSync('systemLocal', JSON.stringify(state.systemLocal)) // 缓存消息
				this.commit('message/setTabbarNum') // 设置 tabbar 数字
			} else if (index === 2) {
				state.myOrderLocal = [...state.myOrder, ...state.myOrderLocal] // 将未读消息放入已读消息列表
				state.myOrder = [] // 将未读消息清空
				uni.setStorageSync('myOrderLocal', JSON.stringify(state.myOrderLocal)) // 缓存消息
				this.commit('message/setTabbarNum') // 设置 tabbar 数字
			} else if (index === 3) {
				state.downOrderLocal = [...state.downOrder, ...state.downOrderLocal] // 将未读消息放入已读消息列表
				state.downOrder = [] // 将未读消息清空
				uni.setStorageSync('downOrderLocal', JSON.stringify(state.downOrderLocal)) // 缓存消息
				this.commit('message/setTabbarNum') // 设置 tabbar 数字
			}
		},
		clearStorage(state) { // 清除缓存
			state.systemLocal = []
			state.myOrderLocal = []
			state.downOrderLocal = []
			uni.removeStorageSync('systemLocal')
			uni.removeStorageSync('myOrderLocal')
			uni.removeStorageSync('downOrderLocal')
		},
		setMessage(state, payload) { // 获取未读消息
			state.system = payload[0]
			state.myOrder = payload[1]
			state.downOrder = payload[2]
		},
		setTabbarNum() { // 更新 tabbar 数字
			if (this.getters['message/messageNum']) {
				uni.setTabBarBadge({ index: 3, text: this.getters['message/messageNum'] + '' })
			} else {
				uni.removeTabBarBadge({ index: 3 })
			}
		}
	},
	actions: {
		getMessage ({ commit, getters }) {  //获取 app 消息通知
			_API_AppMessage().then(res => { // 发送获取系统消息网络请求
				if (res.code === 200) {
					commit('setMessage', [res.data.system, res.data.myOrder, res.data.downOrder]) //将获取到的用户微信信息存在 store 里
					uni.vibrateLong() // 震动提醒
					uni.setTabBarBadge({ index: 3, text: String(getters.messageNum) }) // 设置 tabbar 数字提醒
				}
			})
		}
	}
}
