import { defineStore } from 'pinia';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
import { listAllNeInfo } from '@/api/ne/neInfo';
import { parseDataToOptions } from '@/utils/parse-tree-utils';
import { getNePerformanceList } from '@/api/perfManage/taskManage';

/**网元信息类型 */
type NeInfo = {
  /**网元列表 */
  neList: Record<string, any>[];
  /**级联options树结构 */
  neCascaderOptions: Record<string, any>[];
  /**选择器单级父类型 */
  neSelectOtions: Record<string, any>[];
  /**性能测量数据集 */
  perMeasurementList: Record<string, any>[];
};

const useNeInfoStore = defineStore('neinfo', {
  state: (): NeInfo => ({
    neList: [],
    neCascaderOptions: [],
    neSelectOtions: [],
    perMeasurementList: [],
  }),
  getters: {
    /**
     * 获取级联options树结构
     * @param state 内部属性不用传入
     * @returns 级联options
     */
    getNeCascaderOptions(state) {
      return state.neCascaderOptions;
    },
    /**
     * 选择器单级父类型
     * @param state 内部属性不用传入
     * @returns 级联options
     */
    getNeSelectOtions(state) {
      return state.neSelectOtions;
    },
  },
  actions: {
    // 刷新网元列表
    async fnRefreshNelist() {
      this.neList = [];
      const res = await this.fnNelist();
      return res;
    },
    // 获取网元列表
    async fnNelist() {
      // 有数据不请求
      if (this.neList.length > 0) {
        return { code: RESULT_CODE_SUCCESS, data: this.neList, msg: 'success' };
      }
      const res = await listAllNeInfo({
        bandStatus: false,
      });
      if (res.code === RESULT_CODE_SUCCESS) {
        // 原始列表
        this.neList = JSON.parse(JSON.stringify(res.data));

        // 转级联数据
        const options = parseDataToOptions(
          res.data,
          'neType',
          'neName',
          'neId'
        );
        this.neCascaderOptions = options;

        // 转选择器单级父类型
        this.neSelectOtions = options.map(item => item);
      }
      return res;
    },
    // 获取性能测量数据集列表
    async fnNeTaskPerformance() {
      // 有数据不请求
      if (this.perMeasurementList.length > 0) {
        return { code: RESULT_CODE_SUCCESS, data: this.perMeasurementList, msg: 'success' };
      }
      const res = await getNePerformanceList();
      if (res.code === RESULT_CODE_SUCCESS) {
        this.perMeasurementList = res.data;
      }
      return res;
    },
  },
});

export default useNeInfoStore;
