/**
 * 门店列表数据加载动作：
 * - 列表查询
 * - 统计查询
 */
import type { Ref } from 'vue';

import type { PagePaginationState, StoreFilterState } from '../../types';

import type { StoreListItemDto, StoreStatsDto } from '#/api/store';

import { getStoreListApi, getStoreStatsApi } from '#/api/store';

interface CreateDataActionsOptions {
  filters: StoreFilterState;
  isLoading: Ref<boolean>;
  pagination: PagePaginationState;
  stats: Ref<StoreStatsDto>;
  storeList: Ref<StoreListItemDto[]>;
}

export function createDataActions(options: CreateDataActionsOptions) {
  /** 加载门店列表并同步分页总数。 */
  async function loadList() {
    // 1. 开启加载态。
    options.isLoading.value = true;
    try {
      // 2. 按当前筛选与分页请求列表。
      const res = await getStoreListApi({
        auditStatus: options.filters.auditStatus,
        businessStatus: options.filters.businessStatus,
        keyword: options.filters.keyword || undefined,
        page: options.pagination.current,
        pageSize: options.pagination.pageSize,
        serviceType: options.filters.serviceType,
      });

      // 3. 同步结果到页面状态。
      options.storeList.value = res.items;
      options.pagination.total = res.total;
    } catch (error) {
      console.error(error);
    } finally {
      options.isLoading.value = false;
    }
  }

  /** 加载门店统计数据。 */
  async function loadStats() {
    try {
      options.stats.value = await getStoreStatsApi();
    } catch (error) {
      console.error(error);
    }
  }

  return {
    loadList,
    loadStats,
  };
}
