/**
 * 门店列表交互动作：
 * - 查询
 * - 重置
 * - 分页变更
 */
import type {
  PagePaginationState,
  StoreFilterState,
  TablePagination,
} from '../../types';

import { resetFilters } from './helpers';

interface CreateListActionsOptions {
  filters: StoreFilterState;
  loadList: () => Promise<void>;
  pagination: PagePaginationState;
}

export function createListActions(options: CreateListActionsOptions) {
  /** 按当前筛选条件查询列表。 */
  async function handleSearch() {
    // 1. 查询时回到第一页。
    options.pagination.current = 1;

    // 2. 刷新列表数据。
    await options.loadList();
  }

  /** 重置筛选并刷新列表。 */
  async function handleReset() {
    // 1. 清空筛选条件。
    resetFilters(options.filters);

    // 2. 重置页码并刷新列表。
    options.pagination.current = 1;
    await options.loadList();
  }

  /** 分页参数变化后刷新列表。 */
  async function handleTableChange(pagination: TablePagination) {
    // 1. 同步分页参数。
    options.pagination.current = pagination.current ?? 1;
    options.pagination.pageSize = pagination.pageSize ?? 10;

    // 2. 使用新分页重新加载。
    await options.loadList();
  }

  return {
    handleReset,
    handleSearch,
    handleTableChange,
  };
}
