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

import type { DS4 } from "../../../config";
import type { DS4ItemDataSourceDataBase, DS4ItemDataSourceDataEquipable } from "../item-data-source-base";

export interface DS4SpellDataSource {
    type: "spell";
    data: DS4SpellDataSourceData;
}

export interface DS4SpellDataSourceData extends DS4ItemDataSourceDataBase, DS4ItemDataSourceDataEquipable {
    spellType: keyof typeof DS4.i18n.spellTypes;
    spellModifier: {
        numerical: number;
        complex: string;
    };
    spellGroups: Record<keyof typeof DS4.i18n.spellGroups, boolean>;
    maxDistance: UnitData<DistanceUnit>;
    effectRadius: UnitData<DistanceUnit>;
    duration: UnitData<TemporalUnit>;
    cooldownDuration: CooldownDuration;
    minimumLevels: {
        healer: number | null;
        wizard: number | null;
        sorcerer: number | null;
    };
}

export interface UnitData<UnitType> {
    value: string;
    unit: UnitType;
}

type DistanceUnit = keyof typeof DS4.i18n.distanceUnits;
type TemporalUnit = keyof typeof DS4.i18n.temporalUnits;
export type CooldownDuration = keyof typeof DS4.i18n.cooldownDurations;