// SPDX-FileCopyrightText: 2023 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 actorsResult = await migrateCollection(game.actors, migrateActor);
  const scenesResult = await migrateCollection(game.scenes, migrateScene);
  const compendiumsResult = await migrateCompendiums(migrateCompendium);
  return actorsResult === "error" || scenesResult === "error" || compendiumsResult === "error" ? "error" : "success";
}

const itemIdRegex = /Item\.([a-zA-Z0-9]+)/;

/** @type {import('./migrationHelpers.js').Migrator<ActiveEffect>} */
async function migrateActiveEffect(activeEffect) {
  if (activeEffect.parent instanceof Actor) {
    const itemId = activeEffect.origin?.match(itemIdRegex)?.[1];
    if (activeEffect.parent.items.has(itemId)) {
      await activeEffect.delete();
    }
  }
}

const migrateActor = getActorMigrator(undefined, migrateActiveEffect);
const migrateScene = getSceneMigrator(migrateActor);
const migrateCompendium = getCompendiumMigrator({ migrateActor, migrateScene });

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