import * as ExcelJS from 'exceljs';
import { saveAs } from "file-saver";

/**
 * 기술영업 벤더 가능 아이템 Import를 위한 Excel 템플릿 파일 생성 및 다운로드
 */
export async function exportTechVendorPossibleItemsTemplate() {
  // 워크북 생성
  const workbook = new ExcelJS.Workbook();
  workbook.creator = 'Tech Vendor Possible Items Management System';
  workbook.created = new Date();
  
  // 워크시트 생성
  const worksheet = workbook.addWorksheet('기술영업 벤더 가능 아이템');

  // 컬럼 헤더 정의 및 스타일 적용
  worksheet.columns = [
    { header: '아이템코드', key: 'itemCode', width: 20 },
    { header: '벤더코드', key: 'vendorCode', width: 15 },
    { header: '벤더이메일', key: 'vendorEmail', width: 30 },
  ];

  // 헤더 스타일 적용
  const headerRow = worksheet.getRow(1);
  headerRow.eachCell((cell) => {
    cell.fill = {
      type: 'pattern',
      pattern: 'solid',
      fgColor: { argb: 'FFE6F3FF' }
    };
    cell.font = {
      bold: true,
      color: { argb: 'FF1F4E79' }
    };
    cell.border = {
      top: { style: 'thin' },
      left: { style: 'thin' },
      bottom: { style: 'thin' },
      right: { style: 'thin' }
    };
    cell.alignment = {
      vertical: 'middle',
      horizontal: 'center'
    };
  });

  // 샘플 데이터 추가
  const sampleData = [
    { itemCode: 'ITEM001', vendorCode: 'V001', vendorEmail: '' },
    { itemCode: 'ITEM001', vendorCode: 'V002', vendorEmail: '' },
    { itemCode: 'ITEM002', vendorCode: '', vendorEmail: 'vendor@example.com' },
    { itemCode: 'ITEM002', vendorCode: 'V002', vendorEmail: '' },
    { itemCode: 'ITEM004', vendorCode: '', vendorEmail: 'vendor2@example.com' },
  ];

  sampleData.forEach((data) => {
    const row = worksheet.addRow(data);
    row.eachCell((cell) => {
      cell.border = {
        top: { style: 'thin' },
        left: { style: 'thin' },
        bottom: { style: 'thin' },
        right: { style: 'thin' }
      };
      cell.alignment = {
        vertical: 'middle',
        horizontal: 'left'
      };
    });
  });

  // 안내사항 워크시트 생성
  const guideSheet = workbook.addWorksheet('사용 가이드');
  
  const guideData = [
    ['기술영업 벤더 가능 아이템 Import 템플릿', ''],
    ['', ''],
    ['📋 사용 방법:', ''],
    ['1. "기술영업 벤더 가능 아이템" 시트에 데이터를 입력하세요', ''],
    ['2. 벤더 식별: 벤더코드 또는 벤더이메일 중 하나는 반드시 입력', ''],
    ['   • 벤더코드가 있으면 벤더코드를 우선 사용', ''],
    ['   • 벤더코드가 없으면 벤더이메일로 벤더 검색', ''],
    ['3. 아이템코드는 실제 존재하는 아이템코드를 사용하세요', ''],
    ['4. 한 아이템코드에 여러 벤더를 매핑할 수 있습니다 (1:N 관계)', ''],
    ['5. 중복된 벤더-아이템 조합은 무시됩니다', ''],
    ['6. 파일 저장 후 시스템에서 업로드하세요', ''],
    ['', ''],
    ['⚠️ 중요 사항:', ''],
    ['- 벤더코드 또는 벤더이메일 중 하나는 반드시 필요', ''],
    ['- 벤더코드가 우선, 없으면 벤더이메일로 검색', ''],
    ['- 중복된 벤더-아이템 조합은 건너뜁니다', ''],
    ['- 오류가 있는 항목은 별도 파일로 다운로드됩니다', ''],
    ['- 빈 셀이 있으면 해당 행은 무시됩니다', ''],
    ['', ''],
    ['💡 팁:', ''],
    ['- 벤더코드만 존재하면 어떤 아이템코드든 입력 가능합니다', ''],
    ['- 아이템코드는 그대로 시스템에 저장됩니다', ''],
    ['', ''],
    ['📞 문의사항이 있으시면 시스템 관리자에게 연락하세요.', ''],
  ];

  guideData.forEach((rowData, index) => {
    const row = guideSheet.addRow(rowData);
    if (index === 0) {
      // 제목 스타일
      row.getCell(1).font = { bold: true, size: 16, color: { argb: 'FF1F4E79' } };
    } else if (rowData[0]?.includes(':')) {
      // 섹션 제목 스타일
      row.getCell(1).font = { bold: true, color: { argb: 'FF1F4E79' } };
    } else if (rowData[0]?.includes('•') || rowData[0]?.includes('-')) {
      // 리스트 아이템 스타일
      row.getCell(1).font = { color: { argb: 'FF333333' } };
    }
  });

  guideSheet.getColumn(1).width = 70;
  guideSheet.getColumn(2).width = 20;

  // 파일 생성 및 다운로드
  try {
    const buffer = await workbook.xlsx.writeBuffer();
    const blob = new Blob([buffer], { 
      type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 
    });
    
    const fileName = `기술영업_벤더_가능_아이템_템플릿_${new Date().toISOString().split('T')[0]}.xlsx`;
    saveAs(blob, fileName);
    
    return { success: true };
  } catch (error) {
    console.error("Excel 템플릿 생성 중 오류:", error);
    return { 
      success: false, 
      error: error instanceof Error ? error.message : "템플릿 생성 중 오류가 발생했습니다." 
    };
  }
} 