import { login, logout, changePwd } from '@/api/user/login';
import { getToken, setToken, removeToken } from '@/utils/auth';
import { SET_TOKEN, UPDATE_USERINFO } from './mutation-types';
import { updateUserinfo, updateUserCellphone } from '@/api/user/update';
import md5 from 'blueimp-md5';

const state = {
  token: getToken(),
  name: '',
  id: '',
  createDate: '',
  trueName: '',
  isSetPassword: null,
};

const getters = {
  token: state => state.token,
  userInfo: ({ token, ...other }) => other,
  adminId: state => state.id,
};

const actions = {
  // 登录
  Login({ commit, dispatch }, { remenberAccount, ...entity }) {
    return login({
      data: {
        ...entity,
        pwd: md5(entity.pwd),
      },
    }).then(response => {
      const {
        token,
        data: { userRoles, userInfo },
      } = response;
      if (remenberAccount) {
        setToken(token, 7);
      } else {
        setToken(token, 1);
      }
      commit(SET_TOKEN, token);
      commit(UPDATE_USERINFO, userInfo);
      dispatch('getAsyncRoute', userRoles);
    });
  },
  // token登录
  TokenLogin({ commit, dispatch }, entity) {
    return login(entity).then(response => {
      const {
        data: { userRoles, userInfo },
      } = response;
      commit(UPDATE_USERINFO, userInfo);
      dispatch('getAsyncRoute', userRoles);
    });
  },

  // 登出
  LogOut({ commit, state }) {
    return logout(state.token).then(() => {
      commit(SET_TOKEN, '');
      removeToken();
      resolve();
    });
  },

  // 前端 登出
  FedLogOut({ commit }) {
    return new Promise(resolve => {
      commit(SET_TOKEN, '');
      removeToken();
      resolve();
    });
  },

  // 修改密码
  updatePassword({ commit, dispatch }, { oldPwd, newPwd }) {
    return changePwd({
      data: {
        oldPwd: md5(oldPwd),
        newPwd: md5(newPwd),
      },
    }).then(res => {
      const {
        data: { userRoles, userInfo },
      } = res;
      commit(UPDATE_USERINFO, userInfo);
      dispatch('getAsyncRoute', userRoles);
    });
  },
  // 修改资料
  updateUserinfo({ commit, dispatch }, { name, newPwd, oldPwd }) {
    return updateUserinfo({
      data: newPwd
        ? {
            name,
            newPwd: md5(newPwd),
            oldPwd: md5(oldPwd),
          }
        : {
            name,
          },
    }).then(res => {
      const {
        data: { userRoles, userInfo },
      } = res;
      commit(UPDATE_USERINFO, userInfo);
      dispatch('getAsyncRoute', userRoles);
      return res;
    });
  },
  // 修改电话
  updateUserCellphone({ commit }, entity) {
    return updateUserCellphone({
      params: entity,
    }).then(res => {
      console.log(res);
      commit(UPDATE_USERINFO, entity);
      return res;
    });
  },
};

const mutations = {
  [SET_TOKEN](state, token) {
    state.token = token;
  },
  [UPDATE_USERINFO](state, userInfo) {
    state = Object.assign(state, {
      ...userInfo,
    });
  },
};

export default {
  state,
  getters,
  actions,
  mutations,
};