import Vue from 'vue'
import Vuex from 'vuex'
import * as api from '@/api'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    // 存放状态
    configList: [],
    departmentList: [],
    categoryList: []
  },
  mutations: {
    // 构造用于uv-picker的树状结构数组
    setCategoryList(state, data) {
      // 将返回的平面数组data 根据pid和hasChild组装成两个数组，其一为pid为0的父级一维数组，其二为pid不为0的子级二维数组，其中pid相同的排一起 不同的分为不同子数组，并且按顺序排序，比如第一个为[中国，美国] 第二个按顺序为[[上海，福建],[纽约,华盛顿]]
      
      // 分离父级和子级数据
      const parentCategories = data.filter(item => item.pid === 0 || item.pid === '0')
      const childCategories = data.filter(item => item.pid !== 0 && item.pid !== '0')
      
      // 构建父级一维数组
      const parentArray = parentCategories.map((item) => {
        return {
          label: item.name || item.title || item.categoryName,
          value: item.id
        }
      })
      
      // 构建子级二维数组
      const childArray = []
      parentCategories.forEach(parent => {
        const children = childCategories
          .filter(child => child.pid === parent.id)
          .map(child => {
            return {
              label: child.name || child.title || child.categoryName,
              value: child.id
            }
          })
        childArray.push(children.length > 0 ? children : [{
          label: '全部',
          value: 0
        }])
      })
      
      // 组装最终结果
      state.categoryList = [parentArray, childArray]
      
    },
    setConfigList(state, data) {
      state.configList = data
    },
    setDepartmentList(state, data) {
      state.departmentList = data
    },
  
    // 
  },
  actions: {
    // 查询配置列表
    async getConfig({ commit }) {
      const res = await api.config.queryConfigList()
      // 要求变成键值对的样子
      const config = res.result.records.reduce((acc, item) => {
        if (!item.paramCode) {
          console.log('paramCode为空', item);
          return acc
        }
        acc[item.paramCode] = item
        return acc
      }, {})
      commit('setConfigList', config)
    },
    // 查询部门列表
    async getDepartment({ commit }) {
      const res = await api.config.queryDepartmentList()
      commit('setDepartmentList', res.result.records)
    },
    // 获取分类列表
    async getCategory({ commit }) {
      const res = await api.config.queryCategoryList()
      commit('setCategoryList', res.result.records)
    },
    // 初始化数据
    async initData({ dispatch, state }) {
      // 检查是否已初始化
      if (state.configList.length > 0 && state.departmentList.length > 0 && state.categoryList.length > 0) {

        console.log('配置数据已初始化，无需重复初始化')
        return
      }

      try {
        await Promise.all([
          dispatch('getConfig'),
          dispatch('getDepartment'),
          dispatch('getCategory'),
          ])
        console.log('所有配置数据初始化完成')
      } catch (error) {
        console.error('配置数据初始化失败:', error)
      }
    },
  }
})

export default store