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

const SHIP_TYPES = ['A-MAX', 'S-MAX', 'LNGC', 'VLCC', 'CONT'] as const;

/**
 * 조선 아이템 데이터 가져오기를 위한 Excel 템플릿 파일 생성 및 다운로드
 */
export async function exportItemTemplate() {
  // 워크북 생성
  const workbook = new ExcelJS.Workbook();
  workbook.creator = 'Shipbuilding Item Management System';
  workbook.created = new Date();
  
  // 워크시트 생성
  const worksheet = workbook.addWorksheet('조선 아이템');

  // 컬럼 헤더 정의 및 스타일 적용
  worksheet.columns = [
    { header: '아이템 코드', key: 'itemCode', width: 15 },
    { header: '아이템 명', key: 'itemName', width: 30 },
    { header: '기능(공종)', key: 'workType', width: 15 },
    { header: '설명', key: 'description', width: 50 },
    ...SHIP_TYPES.map(type => ({ 
      header: type, 
      key: type, 
      width: 10 
    }))
  ];

  // 헤더 스타일 적용
  const headerRow = worksheet.getRow(1);
  headerRow.font = { bold: true };
  headerRow.fill = {
    type: 'pattern',
    pattern: 'solid',
    fgColor: { argb: 'FFE0E0E0' }
  };
  headerRow.alignment = { vertical: 'middle', horizontal: 'center' };

  // 테두리 스타일 적용
  headerRow.eachCell((cell) => {
    cell.border = {
      top: { style: 'thin' },
      left: { style: 'thin' },
      bottom: { style: 'thin' },
      right: { style: 'thin' }
    };
  });

  // 샘플 데이터 추가
  const sampleData = [
    { 
      itemCode: 'BG0001', 
      itemName: '샘플 아이템 1', 
      workType: '기장',
      description: '이것은 샘플 아이템 1의 설명입니다.',
      'A-MAX': 'O',
      'S-MAX': 'O',
      'LNGC': 'O',
      'VLCC': 'X',
      'CONT': 'X'
    },
    { 
      itemCode: 'BG0002', 
      itemName: '샘플 아이템 2', 
      workType: '전장',
      description: '이것은 샘플 아이템 2의 설명입니다.',
      'A-MAX': 'O',
      'S-MAX': 'X',
      'LNGC': 'O',
      'VLCC': 'O',
      'CONT': 'X'
    }
  ];

  // 데이터 행 추가
  sampleData.forEach(item => {
    worksheet.addRow(item);
  });

  // 데이터 행 스타일 적용
  worksheet.eachRow((row, rowNumber) => {
    if (rowNumber > 1) { // 헤더를 제외한 데이터 행
      row.eachCell((cell) => {
        cell.border = {
          top: { style: 'thin' },
          left: { style: 'thin' },
          bottom: { style: 'thin' },
          right: { style: 'thin' }
        };
      });
    }
  });

  // 워크시트 보호 (선택적)
  worksheet.protect('', {
    selectLockedCells: true,
    selectUnlockedCells: true,
    formatColumns: true,
    formatRows: true,
    insertColumns: false,
    insertRows: true,
    insertHyperlinks: false,
    deleteColumns: false,
    deleteRows: true,
    sort: true,
    autoFilter: true,
    pivotTables: false
  });

  try {
    // 워크북을 Blob으로 변환
    const buffer = await workbook.xlsx.writeBuffer();
    const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
    saveAs(blob, 'shipbuilding-item-template.xlsx');
    return true;
  } catch (error) {
    console.error('Excel 템플릿 생성 오류:', error);
    throw error;
  }
}