import type { CSSProperties, ReactNode } from "react";

export interface UploadProps {
  /** 样式扩展（字符串/对象/slot） */
  sx?: string | object;
  /** 行内样式 */
  style?: CSSProperties;
  /** 额外 CSS 类名 */
  className?: string;
  /** 允许的文件类型（同 HTML accept 属性） */
  accept?: string;
  /** 是否多选 */
  multiple?: boolean;
  /** 文件变化回调 */
  onChange?: (files: File[]) => void;
  /** 上传前校验，返回 false 阻止，返回 LIST_IGNORE 不展示 */
  beforeUpload?: (file: File, fileList: File[]) => boolean | Promise<boolean | symbol | File | Blob | undefined>;
  /** 受控文件列表 */
  files?: File[];
  /** 是否显示文件列表 */
  showUploadList?: boolean;
  /** 多选时最大文件数 */
  maxCount?: number;
  /** 单文件最大体积（MB） */
  maxSize?: number;
  /** 选择按钮文字 */
  btnText?: string;
  /** 选择按钮样式 */
  btnStyle?: CSSProperties;
  /** 是否显示文件大小 */
  showSize?: boolean;
  /** 是否禁用 */
  disabled?: boolean;
  /** 子元素 */
  children?: ReactNode;
}

/** beforeUpload 返回此值时，文件不展示在列表中 */
export const LIST_IGNORE: unique symbol;

declare const Upload: ((props: UploadProps) => JSX.Element) & {
  LIST_IGNORE: typeof LIST_IGNORE;
};

export default Upload;
