import type { PageParam, PageResult } from '#/packages/effects/request/src';

/** 模拟接口延迟 */
export function mockDelay<T>(data: T, ms = 120): Promise<T> {
  return new Promise((resolve) => {
    setTimeout(() => resolve(data), ms);
  });
}

/** 分页与简单字段过滤 */
export function mockPage<T extends Record<string, unknown>>(
  list: T[],
  params: PageParam & Record<string, unknown>,
  filter?: (item: T) => boolean,
): PageResult<T> {
  const filtered = filter ? list.filter(filter) : [...list];
  const pageNo = params.pageNo ?? 1;
  const pageSize = params.pageSize ?? 10;
  const start = (pageNo - 1) * pageSize;
  return {
    list: filtered.slice(start, start + pageSize),
    total: filtered.length,
  };
}

export function mockNextCode(prefix: string, seq: number): string {
  return `${prefix}-${String(seq).padStart(4, '0')}`;
}
