import AdmZip from "adm-zip";
import fs from "node:fs";

const DATA = JSON.parse(fs.readFileSync("./data.json", "utf-8"));
const chapters = fs.readdirSync("../_sprites/original");

function add_singles(chapter, sprite_name) {
  const img_name = `${sprite_name}.png`;
  if (!fs.existsSync(`../_sprites/translation/${img_name}`)) return;

  fs.copyFileSync(
    `../_sprites/translation/${img_name}`,
    `../_sprites/sorted/${chapter}/${img_name}`
  );

  if (fs.existsSync(`../_sprites/translation/sp_${img_name}`)) {
    fs.copyFileSync(
      `../_sprites/translation/sp_${img_name}`,
      `../_sprites/sorted/${chapter}/sp_${img_name}`
    );
  }
}

function add_animations(chapter, sprite_name) {
  if (
    fs.existsSync(`../_sprites/translation/${sprite_name}`) &&
    !fs.existsSync(`../_sprites/sorted/${chapter}/${sprite_name}`)
  ) {
    fs.cpSync(
      `../_sprites/original/${chapter}/${sprite_name}`,
      `../_sprites/sorted/${chapter}/${sprite_name}`,
      { recursive: true, force: true }
    );
  } else return;

  if (fs.existsSync(`../_sprites/translation/sp_${sprite_name}`)) {
    fs.cpSync(
      `../_sprites/original/${chapter}/${sprite_name}`,
      `../_sprites/sorted/${chapter}/sp_${sprite_name}`,
      { recursive: true, force: true }
    );
  }

  const sprite_frames = DATA[chapter][sprite_name];
  for (let frame of sprite_frames) {
    const img_name = `${sprite_name}_${frame}.png`;
    if (!fs.existsSync(`../_sprites/translation/${sprite_name}/${img_name}`))
      continue;

    fs.copyFileSync(
      `../_sprites/translation/${sprite_name}/${img_name}`,
      `../_sprites/sorted/${chapter}/${sprite_name}/${img_name}`
    );

    if (
      fs.existsSync(`../_sprites/translation/sp_${sprite_name}/sp_${img_name}`)
    ) {
      fs.copyFileSync(
        `../_sprites/translation/sp_${sprite_name}/sp_${img_name}`,
        `../_sprites/sorted/${chapter}/sp_${sprite_name}/sp_${img_name}`
      );
    }
  }
}

for (const chapter of chapters) {
  if (!chapter.endsWith(".DS_Store")) {
    if (!fs.existsSync(`../_sprites/sorted`))
      fs.mkdirSync(`../_sprites/sorted`);
    if (!fs.existsSync(`../_sprites/sorted/${chapter}`))
      fs.mkdirSync(`../_sprites/sorted/${chapter}`);

    for (const sprite of Object.keys(DATA[chapter])) {
      const frames: any[] = DATA[chapter][sprite];

      if (frames.length == 1) add_singles(chapter, sprite);
      else add_animations(chapter, sprite);
    }
  }
}

// :D
