import { CSSProperties, ReactNode } from "react";

//#region src/components/list/types.d.ts
/** 响应式配置接口 */
interface ResponsiveConfig {
  /** PC端特定配置 */
  pc?: Partial<ListProps>;
  /** 平板端特定配置 */
  pad?: Partial<ListProps>;
  /** 移动端特定配置 */
  mobile?: Partial<ListProps>;
}
/** 响应式Props接口 - 继承ListProps并添加responsive属性 */
interface ResponsiveProps extends ListProps {
  /** 响应式配置 */
  responsive?: ResponsiveConfig;
}
/** ResponsiveWrapper 组件属性 */
interface ResponsiveWrapperProps extends ResponsiveProps {
  /** 子元素 */
  children?: ReactNode;
}
/** 基础列表项接口 */
interface BaseListItem {
  /** 唯一标识 */
  id: string | number;
  /** 预设高度（瀑布流模式） */
  height?: number;
  /** 预设宽度（瀑布流模式） */
  width?: number;
  /** 其他任意属性，可以包含用于分组的字段 */
  [key: string]: any;
}
/** 空状态配置接口 */
interface EmptyStateConfig {
  /** 是否显示空状态 */
  show?: boolean;
  /** 空状态文本 */
  text?: string;
  /** 空状态图标 */
  icon?: ReactNode;
  /** 空状态描述 */
  description?: string;
}
/** 分页信息接口 */
interface PaginationInfo {
  /** 当前页数 */
  current?: number;
  /** 总页数 */
  total?: number;
  /** 总数据条数 */
  totalCount?: number;
}
/** 布局配置接口 */
interface LayoutConfig {
  /** 显示样式 */
  displayStyle?: 'grid' | 'waterfall';
  /** 排版方式 */
  layoutDirection?: 'horizontal' | 'vertical';
  /** 列数 */
  columns?: number;
  /** 行数 */
  rows?: number;
  /** 列间距 */
  columnGap?: number;
  /** 行间距 */
  rowGap?: number;
  /** 缩放倍率 */
  zoom?: number;
}
/** Tab配置接口 */
interface TabConfig {
  /** tab样式 */
  tabStyle?: 'anchor' | 'switch' | 'none';
  /** 指定用于分组的数据字段名，例如 'category'、'type' 等 */
  tabGroup?: string;
  /** Tab数据源 */
  tabData?: TabItem[];
  /** 顶部固定 */
  stickyTop?: boolean;
}
/** 分页配置接口 */
interface PaginationConfig {
  /** 分页方式 */
  paginationType?: 'all' | 'scroll' | 'pager' | 'more';
  /** 默认显示个数 */
  defaultPageSize?: number;
  /** 每次加载个数 */
  pageSize?: number;
  /** 分页信息 */
  pagination?: PaginationInfo;
}
/** 泛型List组件Props接口 */
interface ListProps<TItem extends BaseListItem = BaseListItem> {
  /** 基础属性 */
  className?: string;
  style?: CSSProperties;
  width?: string | number;
  height?: string | number;
  /** 布局配置 */
  displayStyle?: LayoutConfig['displayStyle'];
  layoutDirection?: LayoutConfig['layoutDirection'];
  columns?: LayoutConfig['columns'];
  rows?: LayoutConfig['rows'];
  columnGap?: LayoutConfig['columnGap'];
  rowGap?: LayoutConfig['rowGap'];
  zoom?: LayoutConfig['zoom'];
  /** Tab配置 */
  tabStyle?: TabConfig['tabStyle'];
  tabGroup?: TabConfig['tabGroup'];
  tabData?: TabConfig['tabData'];
  stickyTop?: TabConfig['stickyTop'];
  /** 分页配置 */
  paginationType?: PaginationConfig['paginationType'];
  defaultPageSize?: PaginationConfig['defaultPageSize'];
  pageSize?: PaginationConfig['pageSize'];
  pagination?: PaginationConfig['pagination'];
  /** 数据和渲染 */
  data?: TItem[];
  children?: ReactNode;
  renderItem?: (item: TItem, index: number) => ReactNode;
  /** 回调函数 */
  onLoadData?: (params: LoadDataParams) => void;
  /** 状态配置 */
  emptyConfig?: EmptyStateConfig;
  loading?: boolean;
  renderSearch?: () => ReactNode;
}
interface TabItem {
  /** 唯一标识，同时用作anchor模式下的锚点标识 */
  key: string;
  /** 显示文本 */
  label: string;
  /** 分组值，对应数据项中 tabGroup 指定字段的值 */
  group?: string;
  /** 是否禁用 */
  disabled?: boolean;
}
/** 数据加载触发类型 */
type LoadDataTrigger = 'tabChange' | 'pagination' | 'pageSize' | 'loadMore' | 'scroll';
/** 统一的数据加载参数 */
interface LoadDataParams {
  /** 触发类型 */
  trigger: LoadDataTrigger;
  /** 当前页码 */
  currentPage: number;
  /** 每页数量 */
  pageSize: number;
  /** 当前激活的tab */
  activeTab?: string;
  /** 上一页页码（分页变化时提供） */
  previousPage?: number;
  /** 上一页大小（页大小变化时提供） */
  previousPageSize?: number;
}
//#endregion
export { BaseListItem, EmptyStateConfig, LayoutConfig, ListProps, LoadDataParams, LoadDataTrigger, PaginationConfig, PaginationInfo, ResponsiveProps, ResponsiveWrapperProps, TabConfig, TabItem };