/**
 * 엑셀 내보내기 유틸리티
 *
 * 여러 모듈에서 공통으로 사용:
 * - 근태관리 (AttendanceManagement)
 * - 급여관리 (SalaryManagement)
 * - 기타 데이터 내보내기가 필요한 모듈
 */

/**
 * 엑셀 파일 다운로드 처리
 *
 * API 응답(Blob)을 받아 파일 다운로드를 트리거합니다.
 *
 * @param response - fetch Response 객체 (Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet)
 * @param filename - 저장할 파일명 (확장자 포함)
 */
export async function downloadExcelFromResponse(
  response: Response,
  filename: string
): Promise<void> {
  if (!response.ok) {
    throw new Error(`엑셀 다운로드 실패: ${response.status}`);
  }

  const blob = await response.blob();
  downloadBlob(blob, filename);
}

/**
 * Blob을 파일로 다운로드
 *
 * @param blob - 다운로드할 Blob 데이터
 * @param filename - 저장할 파일명
 */
export function downloadBlob(blob: Blob, filename: string): void {
  const url = URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = url;
  link.download = filename;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
  URL.revokeObjectURL(url);
}

/**
 * 현재 날짜/시간을 포함한 파일명 생성
 *
 * @param prefix - 파일명 접두사 (예: '근태현황', '급여명세')
 * @param extension - 파일 확장자 (기본값: 'xlsx')
 * @returns 생성된 파일명 (예: '근태현황_20250115_143052.xlsx')
 */
export function generateExportFilename(
  prefix: string,
  extension: string = 'xlsx'
): string {
  const now = new Date();
  const dateStr = now.toISOString().slice(0, 10).replace(/-/g, '');
  const timeStr = now.toTimeString().slice(0, 8).replace(/:/g, '');
  return `${prefix}_${dateStr}_${timeStr}.${extension}`;
}

