using PkmnLib.Dataloader;
using PkmnLib.Dynamic.Libraries;
using PkmnLib.Plugin.Gen7;
using PkmnLib.Static.Libraries;

namespace PkmnLib.Tests.Integration;

public static class LibraryHelpers
{
    public static IDynamicLibrary LoadLibrary()
    {
        using var typesFile = File.Open("Data/Types.csv", FileMode.Open, FileAccess.Read, FileShare.Read);
        var types = TypeDataLoader.LoadTypeLibrary(typesFile);
        using var naturesFile = File.Open("Data/Natures.csv", FileMode.Open, FileAccess.Read, FileShare.Read);
        var natures = NatureDataLoader.LoadNatureLibrary(naturesFile);
        using var movesFile = File.Open("Data/Moves.json", FileMode.Open, FileAccess.Read, FileShare.Read);
        var moves = MoveDataLoader.LoadMoves(movesFile, types);
        using var itemsFile = File.Open("Data/Items.json", FileMode.Open, FileAccess.Read, FileShare.Read);
        var items = ItemDataLoader.LoadItems(itemsFile);
        using var abilitiesFile = File.Open("Data/Abilities.json", FileMode.Open, FileAccess.Read, FileShare.Read);
        var abilities = AbilityDataLoader.LoadAbilities(abilitiesFile);
        using var growthRatesFile = File.Open("Data/GrowthRates.json", FileMode.Open, FileAccess.Read, FileShare.Read);
        var growthRates = GrowthRateDataLoader.LoadGrowthRates(growthRatesFile);
        using var speciesFile = File.Open("Data/Pokemon.json", FileMode.Open, FileAccess.Read, FileShare.Read);
        var species = SpeciesDataLoader.LoadSpecies(speciesFile, types);

        var staticLibrary = new StaticLibraryImpl(new LibrarySettings()
        {
            MaxLevel = 100,
            ShinyRate = 4096,
        }, species, moves, abilities, types, natures, growthRates, items);

        var dynamicLibrary = DynamicLibraryImpl.Create(staticLibrary, [
            new Gen7Plugin(new Gen7PluginConfiguration()
            {
                DamageCalculatorHasRandomness = false,
            }),
        ]);
        return dynamicLibrary;
    }   
}