/**
 * 발송 이력 타입 정의
 */

export interface SentMailHistory {
  id: string; // UUID
  accountId: string; // 발송 계정 ID
  accountName: string; // 발송 계정 이름
  accountEmail: string; // 발송 계정 이메일
  
  // 수신자 정보
  to: string[]; // 받는 사람
  cc?: string[]; // 참조
  bcc?: string[]; // 숨은참조
  
  // 메일 내용
  subject: string; // 제목
  htmlContent: string; // HTML 내용
  templateId?: string; // 사용한 템플릿 ID (있는 경우)
  templateName?: string; // 사용한 템플릿 이름
  
  // 첨부파일 정보
  attachments?: AttachmentInfo[];
  
  // 발송 정보
  sentAt: string; // 발송 시간 (ISO 8601)
  status: 'success' | 'failed' | 'draft'; // 발송 상태 (draft 추가)
  messageId?: string; // SMTP 메시지 ID (성공 시)
  errorMessage?: string; // 오류 메시지 (실패 시)
  
  // 발송 결과
  accepted?: string[]; // 수락된 이메일 주소
  rejected?: string[]; // 거부된 이메일 주소
  
  // 임시 저장 및 삭제
  isDraft?: boolean; // 임시 저장 여부
  deletedAt?: string; // 삭제 시간 (ISO 8601)
  updatedAt?: string; // 수정 시간 (ISO 8601)
}

export interface AttachmentInfo {
  filename: string; // 저장된 파일명
  originalName: string; // 원본 파일명
  size: number; // 파일 크기 (bytes)
  path: string; // 파일 경로
  mimetype: string; // MIME 타입
}

export interface SentMailListQuery {
  page?: number; // 페이지 번호 (1부터 시작)
  limit?: number; // 페이지당 항목 수
  searchTerm?: string; // 검색어 (제목, 받는사람)
  status?: 'success' | 'failed' | 'draft' | 'all'; // 필터: 상태 (draft 추가)
  accountId?: string; // 필터: 발송 계정
  startDate?: string; // 필터: 시작 날짜 (ISO 8601)
  endDate?: string; // 필터: 종료 날짜 (ISO 8601)
  sortBy?: 'sentAt' | 'subject' | 'updatedAt'; // 정렬 기준 (updatedAt 추가)
  sortOrder?: 'asc' | 'desc'; // 정렬 순서
  includeDeleted?: boolean; // 삭제된 메일 포함 여부
  onlyDeleted?: boolean; // 삭제된 메일만 조회
}

export interface SentMailListResponse {
  items: SentMailHistory[];
  total: number;
  page: number;
  limit: number;
  totalPages: number;
}

