import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    historicalSearch: [],   // 历史数据
    allForumList: [], // 全部板块数据
    homeRequestState: false, // 首页推荐和收藏接口的数据请求状态  这个是是否需要发送请求，因为用户点击收藏后需要重新获取
    getUserInfoState: false,  // 这个是是否在请求状态
    favoriteList: [],  // 收藏板块 数据
    recommendList: [],  // 推荐板块数据
    menu: [],
    user: {}, // 用户信息
    hotSearchkeywords: [], // 热门搜索
    loading: null,
  },
  getters: {
  },

  mutations: {
    setHistoricalSearch(state, payload) {
      if (!Array.isArray(payload)) payload = [payload]
      let targetArr = [...new Set([...payload, ...state.historicalSearch])]
      if (targetArr.length > 10) targetArr = targetArr.slice(0, 10)

      state.historicalSearch = targetArr
      localStorage.setItem('historicalSearch', JSON.stringify(targetArr))
    },

    setAllForumList(state, payload) {
      state.allForumList = payload
    },

    setHomeRequestState(state, payload) {
      state.homeRequestState = payload
    },

    setFavoriteList(state, payload) {
      state.favoriteList = payload
    },

    setRecommendList(state, payload) {
      state.recommendList = payload
    },

    setUser(state, payload) {
      state.user = payload
    },

    setHotSearchkeywords(state, payload) {
      state.hotSearchkeywords = payload
    },

    setgetUserInfoState(state, payload) {
      state.getUserInfoState = payload
    },

    setMenu(state, payload) {
      state.menu = payload
    }

  },

  actions: {
    // 获取历史搜索的数据
    fetchHistoricalSearch({ commit }) {
      let historicalSearch = JSON.parse(localStorage.getItem('historicalSearch')) || []
      commit('setHistoricalSearch', historicalSearch)
    },

    // 获取全部板块的数据
    getAllForum({ commit }, that) {
      that.$http.get("/api/home/allForum").then(res => {
        if (res.code != 200) return;
        let allForumList = res.data
        commit('setAllForumList', allForumList)
      }).catch(err => {
        that.$message.error(err.message)
      })

    },

    // 获取用户信息  获取收藏信息那些数据
    getUserInfo({ state, commit }, that) {
      if (state.getUserInfoState) return
      commit('setgetUserInfoState', true)
      that.$http.post("/api/home").then(res => {
        if (res.code != 200) return;
        let data = res.data
        let { config, favorite, hotSearchkeywords, recommend, user, menu } = data

        console.log("user",user.uid > 0);
        const islogin = user.uid > 0 ? true : false;
        console.log("islogin",islogin);
        commit('setHomeRequestState', true)
        commit('setUser', user)
        commit('setFavoriteList', favorite)
        commit('setRecommendList', recommend)
        commit('setHotSearchkeywords', hotSearchkeywords)
        commit('setMenu', menu)

        if (user.uid > 0) {   // 这个是顶部用户数据的 这样不用监听是否请求成功
          setTimeout(() => {
            if (typeof xstat !== "undefined") {
                xstat.identify({
                    uid: user.uid,
                    uin: user.uin,
                });
            }
          }, 600)
        }


        if (that.userInfo) {   // 这个是顶部用户数据的 这样不用监听是否请求成功
          that.userInfo = user
          that.islogin = user.uid > 0 ? true : false;
          that.hotSearchkeywords = hotSearchkeywords
          that.menu = menu
        }

      }).catch(err => {
        that.$message.error(err.message)
      }).finally(() => {
        // that.$closeUnderLoading(that)
        commit('setgetUserInfoState', false)
      })
    },


  },
  modules: {

  },
})

