// SPDX-FileCopyrightText: 2021 Johannes Loher
//
// SPDX-License-Identifier: MIT

import {
  getSceneMigrator,
  migrateCollection,
  migrateCompendiums,
  getCompendiumMigrator,
  getActorMigrator,
} from "./migrationHelpers.js";

/** @type {import("./migration.js").Migration["migrate"]} */
async function migrate() {
  const itemsResult = await migrateCollection(game.items, migrateItem);
  const actorsResult = await migrateCollection(game.actors, migrateActor);
  const scenesResult = await migrateCollection(game.scenes, migrateScene);
  const compendiumsResult = await migrateCompendiums(migrateCompendium);
  return itemsResult === "error" ||
    actorsResult === "error" ||
    scenesResult === "error" ||
    compendiumsResult === "error"
    ? "error"
    : "success";
}

/** @type {import('./migrationHelpers.js').Migrator<Item>} */
async function migrateItem(item) {
  if (item.type === "equipment" || item.type === "trinket") {
    await item.update({ type: item.type === "equipment" ? "loot" : "equipment" });
  }
}

const migrateActor = getActorMigrator(migrateItem);
const migrateScene = getSceneMigrator(migrateActor);
const migrateCompendium = getCompendiumMigrator(
  { migrateItem, migrateActor, migrateScene },
  { migrateToTemplateEarly: false },
);

/** @type {import("./migration.js").Migration} */
export const migration = {
  migrate,
  migrateCompendium,
};
