import fs from 'fs';
import path from 'path';
const SRC_DIR = path.resolve(process.cwd(), 'src');
const PUBLIC_MD_DIR = path.resolve(process.cwd(), 'public/md');

const moveMarkdownFiles = (dir: string) => {
    // 获取指定目录下的文件
    const files = fs.readdirSync(dir);
    // 遍历文件
    files.forEach((file) => {
        const filePath = path.join(dir, file);
        const stat = fs.statSync(filePath);

        if (stat.isDirectory()) {
            // 如果是目录，递归调用
            moveMarkdownFiles(filePath);
        } else if (file.endsWith('.md')) {
            // 如果是文件，且是.md文件，复制到public/md目录下
            const distPath = path.join(PUBLIC_MD_DIR, path.basename(filePath));

            // 检查目标文件是否存在
            if (!fs.existsSync(distPath)) {
                fs.copyFileSync(filePath, distPath);
                console.log(`自定义vite插件，复制 ${filePath} 到 ${distPath}（新增）`);
            } else {
                // 比较文件大小
                const sourceFileSize = stat.size;
                const distFileSize = fs.statSync(distPath).size;

                if (sourceFileSize !== distFileSize) {
                    fs.copyFileSync(filePath, distPath);
                    console.log(`自定义vite插件，复制 ${filePath} 到 ${distPath}（文件大小不一致）`);
                }
            }
        }
    });
};

export default function () {
    // 确保public/md目标目录存在
    if (!fs.existsSync(PUBLIC_MD_DIR)) {
        fs.mkdirSync(PUBLIC_MD_DIR, { recursive: true });
    }

    return {
        name: 'move-md-plugin',
        // 开发服务器启动时执行
        // configureServer: (server) => {
        //     moveMarkdownFiles(SRC_DIR);
        // },
        // 打包时执行(开发模式下也会执行，所以不需要configureServer)
        buildStart: () => {
            moveMarkdownFiles(SRC_DIR);
        },
    };
}
