"use client";

import { ComponentConfig } from "@/types/component";

/**
 * 파일 정보 인터페이스 (AttachedFileInfo와 호환)
 */
export interface FileInfo {
  // AttachedFileInfo 기본 속성들
  objid: string;
  savedFileName: string;
  realFileName: string;
  fileSize: number;
  fileExt: string;
  filePath: string;
  docType?: string;
  docTypeName?: string;
  targetObjid: string;
  parentTargetObjid?: string;
  companyCode?: string;
  writer?: string;
  regdate?: string;
  status?: string;

  // 추가 호환성 속성들
  path?: string; // filePath와 동일
  name?: string; // realFileName과 동일
  id?: string; // objid와 동일
  size?: number; // fileSize와 동일
  type?: string; // docType과 동일
  uploadedAt?: string; // regdate와 동일
  _file?: File; // 로컬 파일 객체 (업로드 전)

  // 대표 이미지 설정
  isRepresentative?: boolean; // 대표 이미지로 설정 여부
}

/**
 * V2 FileUpload 컴포넌트 설정 타입
 */
export interface FileUploadConfig extends ComponentConfig {
  // file 관련 설정
  placeholder?: string;
  multiple?: boolean;
  accept?: string;
  maxSize?: number; // bytes
  maxFiles?: number; // 최대 파일 수

  // 공통 설정
  disabled?: boolean;
  required?: boolean;
  readonly?: boolean;
  helperText?: string;

  // 스타일 관련
  variant?: "default" | "outlined" | "filled";
  size?: "sm" | "md" | "lg";

  // V2 추가 설정
  showPreview?: boolean; // 미리보기 표시 여부
  showFileList?: boolean; // 파일 목록 표시 여부
  showFileSize?: boolean; // 파일 크기 표시 여부
  allowDelete?: boolean; // 삭제 허용 여부
  allowDownload?: boolean; // 다운로드 허용 여부

  // 이벤트 관련
  onChange?: (value: any) => void;
  onFocus?: () => void;
  onBlur?: () => void;
  onClick?: () => void;
  onFileUpload?: (files: FileInfo[]) => void;
  onFileDelete?: (fileId: string) => void;
  onFileDownload?: (file: FileInfo) => void;
}

/**
 * V2 FileUpload 컴포넌트 Props 타입
 */
export interface FileUploadProps {
  id?: string;
  name?: string;
  value?: any;
  config?: FileUploadConfig;
  className?: string;
  style?: React.CSSProperties;

  // 파일 관련
  uploadedFiles?: FileInfo[];

  // 이벤트 핸들러
  onChange?: (value: any) => void;
  onFocus?: () => void;
  onBlur?: () => void;
  onClick?: () => void;
  onFileUpload?: (files: FileInfo[]) => void;
  onFileDelete?: (fileId: string) => void;
  onFileDownload?: (file: FileInfo) => void;
}

/**
 * 파일 업로드 상태 타입
 */
export type FileUploadStatus = "idle" | "uploading" | "success" | "error";

/**
 * 파일 업로드 응답 타입
 */
export interface FileUploadResponse {
  success: boolean;
  data?: FileInfo[];
  files?: FileInfo[];
  message?: string;
  error?: string;
}
