import { defineStore } from 'pinia'
import { listConvert } from '@/api/system/convert.js'

// 定义计量单位Store
const useUnitStore = defineStore(
  'unit', // Store唯一标识
  {
    state: () => ({
      // 分组后的单位数据（按unitType分组）
      unitData: {},
      // 查询参数（与原逻辑一致）
      queryParams: {
        pageNum: 1,
        pageSize: 1000,
        unitType: null,
        unitName: null,
        baseUnit: null,
        conversionFactor: null,
        unitTypeName: null,
        status: null,
        unitOrder: null
      },
      // 加载状态（扩展：可选）
      loading: false
    }),
    actions: {
      /**
       * 数据分组核心方法（复用原有逻辑）
       * @param {Array} data 原始单位列表数据
       * @returns {Object} 按unitType分组后的对象
       */
      groupByUnitType(data) {
        return data.reduce((acc, unit) => {
          const type = unit.unitType;
          if (!acc[type]) acc[type] = [];
          acc[type].push({
            id: unit.id,
            unitType: unit.unitType,
            unitName: unit.unitName,
            conversionFactor: unit.conversionFactor,
            unitOrder: unit.unitOrder,
            baseUnit: unit.baseUnit,
            status: unit.status,
            unitTypeName: unit.unitTypeName
          });
          return acc;
        }, {});
      },

      /**
       * 获取计量单位列表（异步）
       * @returns {Promise} 操作结果Promise
       */
      getList() {
        // 标记加载中
        this.loading = true;
        return new Promise((resolve, reject) => {
          listConvert(this.queryParams)
            .then((response) => {
              // 数据分组处理
              const unitDataGrouped = this.groupByUnitType(response.rows);
              // 更新Store状态
              this.unitData = unitDataGrouped;
              // 本地存储备份
              localStorage.setItem('unitData', JSON.stringify(unitDataGrouped));
              resolve(unitDataGrouped);
            })
            .catch((error) => {
              console.error('获取单位数据失败:', error);
              reject(error);
            })
            .finally(() => {
              // 结束加载状态
              this.loading = false;
            });
        });
      },

      /**
       * 重置查询参数（扩展：方便复用）
       */
      resetQueryParams() {
        this.queryParams = {
          pageNum: 1,
          pageSize: 1000,
          unitType: null,
          unitName: null,
          baseUnit: null,
          conversionFactor: null,
          unitTypeName: null,
          status: null,
          unitOrder: null
        };
      },

      /**
       * 刷新计量单位数据（扩展：重新获取最新数据）
       * @returns {Promise} 操作结果Promise
       */
      refreshUnitData() {
        // 重置页码后重新获取
        this.queryParams.pageNum = 1;
        return this.getList();
      },

      /**
       * 从本地缓存恢复单位数据（扩展：页面刷新后恢复）
       */
      restoreUnitDataFromLocal() {
        const localData = localStorage.getItem('unitData');
        if (localData) {
          this.unitData = JSON.parse(localData);
        }
      }
    }
  }
);

export default useUnitStore;