using NUnit.Framework;
using PkmnLibSharp.Battling;
using PkmnLibSharp.Library;

namespace PkmnLibSharpTests.Battling
{
    public class PokemonBuilderTests
    {
        [Test]
        public void SimpleBuildPokemon()
        {
            var lib = BattleLibraryHelper.GetLibrary();
            var pokemon = new PokemonBuilder(lib, "testSpecies", 50)
                .Build();
            Assert.AreEqual("testSpecies", pokemon.Species.Name);
            Assert.AreEqual(50, pokemon.Level);
            Assert.AreEqual("default", pokemon.Forme.Name);
            pokemon.Dispose();
        }
        
        [Test]
        public void BuildPokemonWithNickname()
        {
            var lib = BattleLibraryHelper.GetLibrary();
            var pokemon = new PokemonBuilder(lib, "testSpecies", 50)
                .WithNickname("cuteNickname")
                .Build();
            Assert.AreEqual("cuteNickname", pokemon.Nickname);
            pokemon.Dispose();
        }

        [Test]
        public void BuildPokemonWithGender()
        {
            var lib = BattleLibraryHelper.GetLibrary();
            var pokemon = new PokemonBuilder(lib, "testSpecies", 50)
                .WithGender(Gender.Female)
                .Build();
            Assert.AreEqual(Gender.Female, pokemon.Gender);
            pokemon.Dispose();
        }

        [Test]
        public void BuildPokemonWithMoves()
        {
            var lib = BattleLibraryHelper.GetLibrary();
            var pokemon = new PokemonBuilder(lib, "testSpecies", 50)
                .LearnMove("testMove", MoveLearnMethod.Unknown)
                .LearnMove("testMove2", MoveLearnMethod.Level)
                .Build();
            Assert.AreEqual("testMove", pokemon.Moves[0].Move.Name);
            Assert.AreEqual("testMove2", pokemon.Moves[1].Move.Name);
            pokemon.Dispose();
        }

    }
}