using PkmnLib.Dynamic.Libraries.DataLoaders.Models;
using PkmnLib.Static;

namespace PkmnLib.Dynamic.Plugins;

/// <summary>
/// Interface for plugins that can mutate data.
/// </summary>
public interface IPluginDataMutator
{
    /// <summary>
    /// Mutates move data after it has been loaded, before it is used to convert to a static library.
    /// </summary>
    void MutateMoveData(SerializedMoveDataWrapper data);

    /// <summary>
    /// Mutates item data after it has been loaded, before it is used to convert to a static library.
    /// </summary>
    void MutateItemData(List<SerializedItem> data);

    /// <summary>
    /// Mutates ability data after it has been loaded, before it is used to convert to a static library.
    /// </summary>
    void MutateAbilityData(Dictionary<string, SerializedAbility> data);

    /// <summary>
    /// Mutates growth rate data after it has been loaded, before it is used to convert to a static library.
    /// </summary>
    void MutateGrowthRateData(List<IGrowthRate> data);

    /// <summary>
    /// Mutates species data after it has been loaded, before it is used to convert to a static library.
    /// </summary>
    void MutateSpeciesData(Dictionary<string, SerializedSpecies> data);
}