public class PokeGam
{
    private Pokemon[] starterPokemonArray = new Pokemon[]
    {
        new Pokemon("Charmander", 5, "A fire lizard", new Move[]
        {
            new Move("Scratch", 5),
            new Move("Ember", 10), 
            null,
            null
        }),
        new Pokemon("Bulbasaur", 5, "A grass dinosaur", new Move[]
        {
            new Move("Tackle", 5),
            new Move("Vine Whip", 10), 
            null,
            null
        }),
        new Pokemon("Squirtle", 5, "A water turtle", new Move[]
        {
            new Move("Tackle", 5),
            new Move("Water Gun", 10), 
            null,
            null
        })
    };

    public void Start()
    {
        Console.WriteLine("Welcome to PokeGaam!");
        Console.WriteLine("");

        while(true)
        {
            Pokemon inspectedPokemon = InspectPokemon();
            Console.WriteLine("");
            Console.WriteLine("Press 'Y' to select this starter pokemon or press any other key to go back.");

            ConsoleKeyInfo input = Console.ReadKey();
            if(input.Key == ConsoleKey.Y)
            {
                Console.Clear();
                Console.WriteLine($"You have selected {inspectedPokemon.Name} your starter pokemon!");
                break;
            }
            Console.Clear();
        }
    }

    private Pokemon InspectPokemon()
    {
        Console.WriteLine("Choose your pokemon!");

        Pokemon chosenPokemon;
        while (true)
        {
            chosenPokemon = RequestPokemon();
            if (chosenPokemon != null)
            {
                PrintPokemonDetails(chosenPokemon);
                break;
            }
            else
            {
                Console.Clear();
                Console.WriteLine("That's not an option you dimwit. Try again.");
                Console.WriteLine("");
                Thread.Sleep(1000);
            }
        }
        return chosenPokemon;
    }

    private Pokemon RequestPokemon()
    {
        Console.WriteLine("Enter a number to inspect the pokemon");
        for(int i = 0; i < starterPokemonArray.Length; i++)
        {
            Console.WriteLine($"{i + 1}. {starterPokemonArray[i].Name}");
        }

        ConsoleKeyInfo input = Console.ReadKey();
        try
        {
            int choiceInt = int.Parse(input.KeyChar.ToString());
            if(choiceInt > starterPokemonArray.Length || choiceInt == 0)
            {
                return null;
            }
            return starterPokemonArray[choiceInt - 1];
        }
        catch (FormatException)
        {
            return null;
        }
    }

    private void PrintPokemonDetails(Pokemon pokemon)
    {
        Console.Clear();
        Console.WriteLine($"Name: {pokemon.Name}");
        Console.WriteLine($"Level: {pokemon.Level}");
        Console.WriteLine($"Description: {pokemon.Description}");
        Console.WriteLine($"");
        Console.WriteLine($"This pokemon has the following moves:");
        foreach(Move move in pokemon.MoveArray)
        {
            if(move != null)
            {
                Console.WriteLine($"Move: {move.Name}");
            }
        }
    }
}