import { UploadFileInfo } from "@progress/kendo-react-upload";

type UploadActionsLayout = "start" | "center" | "end";

type UploadHttpHeaders = { [key: string]: string };
type UploadFileRestrictions = {};
type UploadOnAddEvent = {};

export interface UploadProps {
  dataTestId?: string;
  accept?: string;
  actionsLayout?: UploadActionsLayout;
  ariaDescribedBy?: string;
  ariaLabelledBy?: string;
  autoUpload?: boolean;
  batch?: boolean;
  className?: string;
  defaultFiles?: UploadFileInfo[] | undefined;
  disabled?: boolean;
  files?: UploadFileInfo[] | undefined;
  id?: string;
  listItemUI?: React.ComponentType<any>;
  multiple?: boolean;
  removeField?: string;
  removeHeaders?: UploadHttpHeaders;
  removeMethod?: string;
  removeUrl?:
    | string
    | ((
        files: UploadFileInfo[],
        options: { formData: FormData; requestOptions: any }
      ) => Promise<{ uid: string }>);
  responseType?: "text" | "arraybuffer" | "blob" | "json";
  restrictions?: UploadFileRestrictions;
  saveField?: string;
  saveHeaders?: UploadHttpHeaders;
  saveMethod?: string;
  saveUrl?:
    | string
    | ((
        files: UploadFileInfo[],
        options: { formData: FormData; requestOptions: any },
        onProgress: (uid: string, event: ProgressEvent<EventTarget>) => void
      ) => Promise<{ uid: string }>);
  selectMessageUI?: React.ComponentType<any>;
  showActionButtons?: boolean;
  showFileList?: boolean;
  tabIndex?: string | number;
  withCredentials?: boolean;
  onAdd?: (event: UploadOnAddEvent) => void;
  onBeforeRemove?: (event: any) => void;
  onBeforeUpload?: (event: any) => void;
  onCancel?: (event: any) => void;
  onProgress?: (event: any) => void;
  onRemove?: (event: any) => void;
  onStatusChange?: (event: any) => void;
}
