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

import {
    getActorUpdateDataGetter,
    getCompendiumMigrator,
    getSceneUpdateDataGetter,
    migrateActors,
    migrateCompendiums,
    migrateItems,
    migrateScenes,
} from "./migrationHelpers";

export async function migrate(): Promise<void> {
    await migrateItems(getItemUpdateData);
    await migrateActors(getActorUpdateData);
    await migrateScenes(getSceneUpdateData);
    await migrateCompendiums(migrateCompendium);
}

function getItemUpdateData(itemData: Partial<foundry.data.ItemData["_source"]>) {
    if (itemData.type !== "spell") return;
    const cooldownDurationUnit: string | undefined = itemData.data?.cooldownDuration.unit;

    const updateData: Record<string, unknown> = {
        data: {
            "-=scrollPrice": null,
            minimumLevels: { healer: null, wizard: null, sorcerer: null },
            cooldownDuration: {
                unit: cooldownDurationUnit === "custom" ? "rounds" : cooldownDurationUnit,
            },
        },
    };
    return updateData;
}

const getActorUpdateData = getActorUpdateDataGetter(getItemUpdateData);
const getSceneUpdateData = getSceneUpdateDataGetter(getActorUpdateData);
const migrateCompendium = getCompendiumMigrator({ getItemUpdateData, getActorUpdateData, getSceneUpdateData });