import Vue from 'vue'
import { login, logout } from '@/api/login'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { welcome } from '@/utils/util'
import VueCookies from 'vue-cookies'
const user = {
  state: {
    token: '',
    name: '',
    welcome: '',
    avatar: '',
    roles: { permissionList: [] },
    info: {}
  },

  mutations: {
    SET_TOKEN: (state, token) => {
      state.token = token
      sessionStorage.setItem(ACCESS_TOKEN, token)
    },
    SET_NAME: (state, { name, welcome }) => {
      state.name = name
      state.welcome = welcome
      Vue.ls.set('userName', name, 7 * 24 * 60 * 60 * 1000)
    },
    SET_AVATAR: (state, avatar) => {
      state.avatar = avatar
    },
    SET_ROLES: (state, roles) => {
      state.roles = roles
    },
    SET_INFO: (state, info) => {
      state.info = info
    }
  },

  actions: {
    // 登录
    Login ({ commit }, userInfo) {
      console.log(userInfo, 'userInfo----')
      return new Promise((resolve, reject) => {
        login(userInfo).then(res => {
          console.log(res, 'login success')
          if (res && res.userid) {
            Vue.ls.set('hasError', 0)
            commit('SET_TOKEN', res.userid)
            commit('SET_NAME', { name: res.userNameCN, welcome: welcome() })
            commit('SET_AVATAR', res.avatar ? res.avatar : '')
            Vue.ls.set('rolesAccess', { permissionList: res.permCodes }, 7 * 24 * 60 * 60 * 1000)
            // 记住密码
            if (userInfo.rememberMe) {
              VueCookies.set('REMEMBER_ME', JSON.stringify(userInfo))
            } else {
              VueCookies.remove('REMEMBER_ME')
            }
          }
          resolve()
        }).catch(error => {
          reject(error)
        })
      })
    },
    // 从本地存储更新用户信息
    SetInfo ({ commit }, userInfo) {
      commit('SET_NAME', { name: userInfo, welcome: '' })
    },
    // 获取用户信息
    GetInfo ({ commit, state }) {
      const roles = Vue.ls.get('rolesAccess')
      commit('SET_ROLES', roles)
      // commit('SET_TOKEN', sessionStorage.getItem(ACCESS_TOKEN) || state.token)
      commit('SET_NAME', { name: Vue.ls.get('userName'), welcome: '' })
      return roles
    },
    // 登出
    Logout ({ commit, state }) {
      console.log(state)
      return new Promise((resolve) => {
        logout(state.token).then((res) => {
          resolve(res.data)
        }).catch((error) => {
          resolve(error)
        }).finally(() => {
          commit('SET_NAME', { name: '', welcome: '' })
          commit('SET_AVATAR', '')
          commit('SET_TOKEN', '')
          commit('SET_ROLES', { permissionList: [] })
          Vue.ls.remove(ACCESS_TOKEN)
          Vue.ls.remove('userName')
          Vue.ls.set('hasError', 0)
          sessionStorage.clear()
        })
      })
    }

  }
}

export default user