/**
 * HTML 슬라이드를 PPTX로 변환하는 스크립트
 *
 * 사용법:
 *   node convert-html-to-pptx.js --input <html_slides_folder> --output <output.pptx>
 */

const fs = require('fs');
const path = require('path');
const PptxGenJS = require('pptxgenjs');

// html2pptx.js 모듈 로드
const pptxSkillPath = path.join(__dirname, '../../pptx-skill/scripts/html2pptx.js');
let html2pptx;

if (fs.existsSync(pptxSkillPath)) {
    html2pptx = require(pptxSkillPath);
} else {
    console.error('❌ html2pptx.js를 찾을 수 없습니다.');
    console.error('   경로:', pptxSkillPath);
    process.exit(1);
}

async function main() {
    const args = process.argv.slice(2);
    let inputDir = null;
    let outputFile = null;

    for (let i = 0; i < args.length; i++) {
        if (args[i] === '--input' && args[i + 1]) {
            inputDir = args[i + 1];
            i++;
        } else if (args[i] === '--output' && args[i + 1]) {
            outputFile = args[i + 1];
            i++;
        }
    }

    if (!inputDir) {
        console.error('Usage: node convert-html-to-pptx.js --input <html_slides_folder> --output <output.pptx>');
        process.exit(1);
    }

    if (!fs.existsSync(inputDir)) {
        console.error(`❌ 입력 폴더를 찾을 수 없습니다: ${inputDir}`);
        process.exit(1);
    }

    // HTML 파일 목록 가져오기 (이름순 정렬)
    const htmlFiles = fs.readdirSync(inputDir)
        .filter(f => f.endsWith('.html'))
        .sort()
        .map(f => path.join(inputDir, f));

    if (htmlFiles.length === 0) {
        console.error('❌ HTML 파일을 찾을 수 없습니다.');
        process.exit(1);
    }

    // 출력 파일명 설정
    if (!outputFile) {
        outputFile = path.join(path.dirname(inputDir), 'storyboard.pptx');
    }

    console.log('🚀 HTML → PPTX 변환 시작\n');
    console.log(`📂 입력 폴더: ${inputDir}`);
    console.log(`📄 HTML 파일: ${htmlFiles.length}개`);
    console.log(`📁 출력 파일: ${outputFile}\n`);

    // PptxGenJS 초기화
    const pptx = new PptxGenJS();

    // 16:9 레이아웃 설정 (720pt x 405pt = 10" x 5.625")
    pptx.defineLayout({ name: 'CUSTOM_16x9', width: 10, height: 5.625 });
    pptx.layout = 'CUSTOM_16x9';

    pptx.author = 'SAM IT Innovation Team';
    pptx.company = 'SAM';
    pptx.subject = 'Web Storyboard';

    // 각 HTML 파일을 슬라이드로 변환
    for (let i = 0; i < htmlFiles.length; i++) {
        const htmlFile = htmlFiles[i];
        const fileName = path.basename(htmlFile);

        try {
            console.log(`⏳ 변환 중 (${i + 1}/${htmlFiles.length}): ${fileName}`);

            await html2pptx(htmlFile, pptx);

            console.log(`✅ 완료: ${fileName}`);
        } catch (error) {
            console.error(`❌ 오류: ${fileName}`);
            console.error(`   ${error.message}`);
            // 오류가 발생해도 계속 진행
        }
    }

    // PPTX 파일 저장
    try {
        // 출력 폴더 생성
        const outputDir = path.dirname(outputFile);
        if (!fs.existsSync(outputDir)) {
            fs.mkdirSync(outputDir, { recursive: true });
        }

        await pptx.writeFile(outputFile);

        const stats = fs.statSync(outputFile);
        const sizeKB = (stats.size / 1024).toFixed(1);

        console.log('\n🎉 PPTX 생성 완료!');
        console.log(`📁 파일: ${outputFile}`);
        console.log(`📊 크기: ${sizeKB} KB`);
        console.log(`📄 슬라이드: ${htmlFiles.length}장`);
    } catch (error) {
        console.error('\n❌ PPTX 저장 실패:', error.message);
        process.exit(1);
    }
}

main().catch(console.error);
