const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const { getInputDir } = require('../utils/index');
const { base, ppt } = require('../config/index');

//工作目录文件夹路径
const inputDir = getInputDir();
if (!inputDir) {
    console.log('未执行ppt转图片功能，工作目录不存在');
    return;
}

//创建pdf输出文件夹
const pdfDir = `${inputDir}/pdf`;
if (!fs.existsSync(pdfDir)) {
    fs.mkdirSync(pdfDir);
}

//创建pdf转图片的输出文件夹
const imgDir = `${inputDir}/img`;
if (!fs.existsSync(imgDir)) {
    fs.mkdirSync(imgDir);
}

// 使用 LibreOffice 将 PPT 转换为 PDF
const convertPptToPdf = (inputDir) => {
    const pdfCmd = `soffice --headless --invisible --convert-to pdf --outdir "${pdfDir}" "${inputDir}" 2>NUL`;
    console.log(pdfCmd);

    execSync(pdfCmd);
};

// 使用 ImageMagick 将 PDF 转换为图片
const convertPdfToImg = (inputDir, file) => {
    const imgItemDir = path.join(imgDir, `${file.split('.')[0]}`);
    if (!fs.existsSync(imgItemDir)) {
        fs.mkdirSync(imgItemDir);
    }

    const imageOutputPath = path.join(imgItemDir, '幻灯片%d.png');
    const imgCmd = `magick -density 72 "${inputDir}" "${imageOutputPath}"`;
    console.log(imgCmd);
    execSync(imgCmd);
};

// 读取输入目录下所有ppt文件 => 转换为pdf
let execNum = 0;
fs.readdirSync(inputDir).forEach((file) => {
    const ext = file.split('.').pop().toLowerCase();
    if (ppt.pptFormat.has(ext)) {
        execNum++;
        if (base.rangeNum && execNum > base.rangeNum) {
            return;
        }

        const inputPath = path.join(inputDir, file);
        convertPptToPdf(inputPath);
    }
});

// 读取输入目录下所有pdf文件下所有pdf文件 => 转换为image
fs.readdirSync(pdfDir).forEach((file) => {
    const ext = file.split('.').pop().toLowerCase();
    if (ppt.pdfFormat.has(ext)) {
        const inputPath = path.join(pdfDir, file);
        convertPdfToImg(inputPath, file);
    }
});
