/**
 * 회사 관리 관련 타입 정의
 */

// 회사 기본 정보 인터페이스 (DB 테이블 구조 기반)
export interface Company {
  company_code: string; // 회사 코드 (varchar 32) - PK
  company_name: string; // 회사명 (varchar 64)
  business_registration_number?: string; // 사업자등록번호 (varchar 20)
  representative_name?: string; // 대표자명 (varchar 100)
  representative_phone?: string; // 대표 연락처 (varchar 20)
  email?: string; // 이메일 (varchar 255)
  website?: string; // 웹사이트 (varchar 500)
  address?: string; // 회사 주소 (text)
  writer: string; // 등록자 (varchar 32)
  regdate: string; // 등록일시 (timestamp -> ISO string)
  status: string; // 상태 (varchar 32)
  // 디스크 사용량 정보 (선택적)
  diskUsage?: {
    fileCount: number;
    totalSize: number;
    totalSizeMB: number;
    lastChecked: string;
  };
}

// 회사 등록/수정 폼 데이터
export interface CompanyFormData {
  company_name: string; // 회사명 (필수)
  business_registration_number: string; // 사업자등록번호 (필수)
  representative_name?: string; // 대표자명
  representative_phone?: string; // 대표 연락처
  email?: string; // 이메일
  website?: string; // 웹사이트
  address?: string; // 회사 주소
}

// 회사 검색 필터
export interface CompanySearchFilter {
  company_name?: string; // 회사명으로 검색
  status?: string; // 상태로 필터링
}

// 회사 관리 모달 상태
export interface CompanyModalState {
  isOpen: boolean;
  mode: "create" | "edit"; // 등록 모드 or 수정 모드
  selectedCompany: Company | null;
  formData: CompanyFormData;
}

// 회사 삭제 다이얼로그 상태
export interface CompanyDeleteState {
  isOpen: boolean;
  targetCompany: Company | null;
}

// API 응답 타입
export interface CompanyApiResponse {
  success: boolean;
  message: string;
  data?: Company | Company[];
}

// 회사 목록 테이블 컬럼 정의
export interface CompanyTableColumn {
  key: keyof Company;
  label: string;
  sortable?: boolean;
  width?: string;
}

// 디스크 사용량 정보
export interface DiskUsageInfo {
  companyCode: string;
  fileCount: number;
  totalSize: number;
  totalSizeMB: number;
  lastChecked: string;
}

// 전체 디스크 사용량 통계
export interface AllDiskUsageInfo {
  companies: DiskUsageInfo[];
  summary: {
    totalCompanies: number;
    totalFiles: number;
    totalSize: number;
    totalSizeMB: number;
  };
  lastChecked: string;
}
