import fs from "fs";
import path from "path";
import { checkRequiredFiles, modifyGltfContent, listGltfFiles, BACKUP_SUFFIX } from "../../utils/gltf.js";

export const runGltfExtension = (config = { files: [], extensions: ["textureBasisu"] }) => {
  const cwd = process.cwd();
  const { files = [], extensions = ["textureBasisu"] } = config;
  const selectedExtensions = extensions.length ? extensions : ["textureBasisu"];

  const { ok, missing } = checkRequiredFiles();
  if (!ok) {
    return { success: false, count: 0, error: "缺少必要文件: " + missing.join(", ") };
  }

  const fallbackFiles = listGltfFiles();
  const gltfFiles = (files.length ? files : fallbackFiles).filter(f => f.toLowerCase().endsWith(".gltf"));
  if (!gltfFiles.length) {
    return { success: false, count: 0, error: "未选择可处理的 glTF 文件" };
  }

  let count = 0;

  for (const file of gltfFiles) {
    const fullPath = path.join(cwd, file);
    if (!fs.existsSync(fullPath)) {
      continue;
    }
    const baseName = file.replace(/\.gltf$/i, "");
    const backupName = baseName + BACKUP_SUFFIX + ".gltf";
    const backupPath = path.join(cwd, backupName);

    fs.copyFileSync(fullPath, backupPath);
    const modified = modifyGltfContent(fullPath, selectedExtensions);
    fs.writeFileSync(fullPath, JSON.stringify(modified, null, 2), "utf-8");
    count++;
  }

  return { success: count > 0, count };
};
