private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            string error = Validate();

            if (!string.IsNullOrWhiteSpace(error))
            {
                MessageBox.Show(error);
            }
            else
            {
                PokemonStats statWindow = new PokemonStats
                {
                    StatPass = this
                };
                statWindow.ShowDialog();

                //Initialize statPool
                StatPool statPool = new StatPool
                {
                    Id = DatabaseOperations.CurrentStatpools() + 1
                };


                //Initialize stat collections
                StatCollection BaseStats     = new StatCollection();
                StatCollection EVStats       = new StatCollection();
                StatCollection IVStats       = new StatCollection();
                StatCollection EVRewardStats = new StatCollection();

                //Assign Values
                BaseStats.Id             = DatabaseOperations.CurrentStatCollections() + 1;
                BaseStats.HP             = baseHP;
                BaseStats.Attack         = baseAtt;
                BaseStats.Defense        = baseDef;
                BaseStats.SpecialAttack  = baseSpAtt;
                BaseStats.SpecialDefence = baseSpDef;
                BaseStats.Speed          = baseSpeed;

                EVStats.Id             = DatabaseOperations.CurrentStatCollections() + 2;
                EVStats.HP             = 0;
                EVStats.Attack         = 0;
                EVStats.Defense        = 0;
                EVStats.SpecialAttack  = 0;
                EVStats.SpecialDefence = 0;
                EVStats.Speed          = 0;

                Random rnd = new Random();
                IVStats.Id             = DatabaseOperations.CurrentStatCollections() + 3;
                IVStats.HP             = rnd.Next(1, 32);
                IVStats.Attack         = rnd.Next(1, 32);
                IVStats.Defense        = rnd.Next(1, 32);
                IVStats.SpecialAttack  = rnd.Next(1, 32);
                IVStats.SpecialDefence = rnd.Next(1, 32);
                IVStats.Speed          = rnd.Next(1, 32);

                EVRewardStats.Id             = DatabaseOperations.CurrentStatCollections() + 4;
                EVRewardStats.HP             = EVHP;
                EVRewardStats.Attack         = EVAtt;
                EVRewardStats.Defense        = EVDef;
                EVRewardStats.SpecialAttack  = EVSpAtt;
                EVRewardStats.SpecialDefence = EVSpDef;
                EVRewardStats.Speed          = EVSpeed;


                //Bind with statpool
                if (DatabaseOperations.AddStatCollection(BaseStats) != 0 &&
                    DatabaseOperations.AddStatCollection(EVStats) != 0 &&
                    DatabaseOperations.AddStatCollection(IVStats) != 0 &&
                    DatabaseOperations.AddStatCollection(EVRewardStats) != 0)
                {
                    statPool.BaseStatId       = BaseStats.Id;
                    statPool.EVStatId         = EVStats.Id;
                    statPool.IVStatId         = IVStats.Id;
                    statPool.EffortValueYield = EVRewardStats.Id;

                    statPool.Nature = "Timid";

                    if (DatabaseOperations.AddStatPool(statPool) != 0)
                    {
                        Pokemon PokemonToAdd = new Pokemon
                        {
                            Id           = DatabaseOperations.CurrentPokemons() + 1,
                            PokedexID    = cmbPokemon.SelectedIndex + 1,
                            PokemonLevel = int.Parse(txtLvl.Text)
                        };
                        PokemonToAdd.PokemonExp = PokemonToAdd.PokemonLevel * PokemonToAdd.PokemonLevel * PokemonToAdd.PokemonLevel;
                        PokemonToAdd.TrainerID  = currentTrainer.Id;
                        PokemonToAdd.AbilityID  = abilityList[cmbAbility.SelectedIndex].Id;
                        PokemonToAdd.StatPoolID = statPool.Id;
                        if (cmbGender.SelectedIndex == 0)
                        {
                            PokemonToAdd.Gender = false;
                        }
                        else
                        {
                            PokemonToAdd.Gender = true;
                        }
                        PokemonToAdd.Nickname = txtName.Text;
                        PokemonToAdd.Shiny    = false;
                        PokemonToAdd.PokeRus  = false;

                        if (DatabaseOperations.AddPokemon(PokemonToAdd) != 0)
                        {
                            LoadDefaultMoves(PokemonToAdd.Id);

                            if (DatabaseOperations.LearnNewMove(DefaultMoves1) != 0 &&
                                DatabaseOperations.LearnNewMove(DefaultMoves2) != 0)
                            {
                                PokemonGroup GroupToAddTo = new PokemonGroup
                                {
                                    Id        = DatabaseOperations.CurrentPokemonGroups() + 1,
                                    PlayerId  = currentTrainer.Id,
                                    PokemonId = PokemonToAdd.Id,
                                    Position  = int.Parse(cmbPosition.Text)
                                };
                                //Enkel als alle stats correct er in zijn geplaatst, word de pokemon in de groep geplaatsts
                                //Bij falen word het een onbereikbaar database element binnen de context van dit programma
                                if (DatabaseOperations.AddToGroup(GroupToAddTo) != 0)
                                {
                                    MessageBox.Show($"{PokemonToAdd.Nickname} is succesvol toegevoegd aan de party van {currentTrainer.TrainerName}");
                                    Close();
                                }
                                else
                                {
                                    MessageBox.Show("Fout in groep creatie; toevoeging niet afgerond");
                                }
                            }
                            else
                            {
                                MessageBox.Show("Geen moves meegegeven; Toevoeging niet afgerond");
                            }
                        }
                        else
                        {
                            MessageBox.Show("Geen valide pokemon; Toevoeging niet afgerond");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Fout in de statpool; toevoeging niet afgerond");
                    }
                }
                else
                {
                    MessageBox.Show("één of meerder van de statcollections zijn niet valide; toevoeging niet afgerond");
                }
            }
        }
        private void BtnConfirm_Click(object sender, RoutedEventArgs e)
        {
            Player        player        = new Player();
            PlayerPokemon playerPokemon = new PlayerPokemon();

            player.Name        = txtPlayerName.Text;
            playerPokemon.Name = txtRenamePokemon.Text;



            if (player.IsGeldig() && playerPokemon.IsGeldig() && PokemonSelected() != false)
            {
                TimeSpan startTime = new TimeSpan(0, 0, 0);


                player.Pokedollar = 10000;
                player.PlayedTime = startTime;

                int ok = DatabaseOperations.AddPlayer(player);

                Random r = new Random();

                PlayerPokedex playerPokedex = new PlayerPokedex();

                int id = 0;

                playerPokedex.PlayerId = player.Id;

                if (tbBulbasaur.IsChecked == true)
                {
                    playerPokemon.Height = 0.7m;
                    playerPokemon.Weight = 6.9m;
                    id = 1;
                    playerPokedex.Caught      = true;
                    playerPokedex.Encountered = true;
                    playerPokedex.PokedexId   = id;
                }
                else if (tbCharmander.IsChecked == true)
                {
                    playerPokemon.Height = 0.6m;
                    playerPokemon.Weight = 8.5m;
                    id = 4;
                    playerPokedex.Caught      = true;
                    playerPokedex.Encountered = true;
                    playerPokedex.PokedexId   = id;
                }
                else if (tbSquirtle.IsChecked == true)
                {
                    playerPokemon.Height = 0.5m;
                    playerPokemon.Weight = 9;
                    id = 7;
                    playerPokedex.Caught      = true;
                    playerPokedex.Encountered = true;
                    playerPokedex.PokedexId   = id;
                }



                DatabaseOperations.AddNewPokemonPlayerPokedex(playerPokedex);


                pokemon = new Pokemon
                {
                    Level          = 7,
                    Hp             = r.Next(0, 32),
                    CurrentHp      = 0,
                    Defense        = r.Next(0, 32),
                    Attack         = r.Next(0, 32),
                    SpecialAttack  = r.Next(0, 32),
                    SpecialDefense = r.Next(0, 32),
                    Speed          = r.Next(0, 32),
                    PokedexId      = id,
                };

                playerPokemon.PokemonId = DatabaseOperations.AddPokemon(pokemon);

                pokemon.Pokedex = DatabaseOperations.GetPokedexEntry(id);
                pokemon.SetMaxHp();
                pokemon.CurrentHp = pokemon.CalculatedMaxHP;

                DatabaseOperations.UpdatePokemonCurrentHp(pokemon);



                playerPokemon.InParty  = true;
                playerPokemon.PlayerId = player.Id;
                playerPokemon.Xp       = Convert.ToInt32(Math.Pow(pokemon.Level - 1, 3));

                DatabaseOperations.AddPlayerPokemon(playerPokemon);

                List <PokemonAttack> pokemonAttacks = DatabaseOperations.GetAvailableAttacks(pokemon.PokedexId, pokemon.Level);

                foreach (var item in pokemonAttacks)
                {
                    if (pokemon.Level >= item.RequiredLevel)
                    {
                        OwnedPokemonAttack ownedPokemonAttack = new OwnedPokemonAttack
                        {
                            AttackId    = item.AttackId,
                            CurrentPp   = item.Attack.Pp,
                            PokemonId   = playerPokemon.PokemonId,
                            KnownAttack = true
                        };
                        DatabaseOperations.AddCaughtPokemonAttacks(ownedPokemonAttack);
                    }
                }

                PlayerInformation.PlayerId = ok;

                MainMenuWindow mainMenuWindow = new MainMenuWindow();
                mainMenuWindow.Show();
                this.Close();
            }
            else if (!player.IsGeldig())
            {
                MessageBox.Show(player.Error);
            }
            else if (!playerPokemon.IsGeldig())
            {
                MessageBox.Show(playerPokemon.Error);
            }
            else
            {
                MessageBox.Show("You need to select a pokemon first.");
            }
        }
        private bool Catch(double catchMultiplier, Pokemon pokemon, List <OwnedPokemonAttack> attacks)
        {
            if (lblEnemyName.Content.ToString() == "Wild Pokemon")
            {
                int    catchRate      = pokemon.Pokedex.CatchRate;
                double catchMissingHp = ((100 - pbHpEnemyPokemon.Value) / 100) + 1;
                double catchNumber    = ((catchRate * catchMissingHp) * catchMultiplier);

                Random r = new Random();

                if (r.Next(0, 101) <= catchNumber)
                {
                    // pokemon object aanmaken om te inserten
                    Pokemon p = new Pokemon
                    {
                        Level          = pokemon.Level,
                        Attack         = pokemon.Attack,
                        Defense        = pokemon.Defense,
                        Hp             = pokemon.Hp,
                        CurrentHp      = pokemon.CalculatedMaxHP,
                        SpecialAttack  = pokemon.SpecialAttack,
                        SpecialDefense = pokemon.SpecialDefense,
                        Speed          = pokemon.Speed,
                        PokedexId      = pokemon.PokedexId
                    };

                    int id = DatabaseOperations.AddPokemon(p);

                    // speler pokemon aanmaken om te inserten
                    PlayerPokemon newPlayerPokemon = new PlayerPokemon
                    {
                        Name      = pokemon.Pokedex.Name,
                        Height    = pokemon.Pokedex.AvgHeight,
                        Weight    = pokemon.Pokedex.AvgWeight,
                        Xp        = (pokemon.Level - 1) * (pokemon.Level - 1) * (pokemon.Level - 1),
                        InParty   = false,
                        PlayerId  = PlayerInformation.PlayerId,
                        PokemonId = id,
                    };

                    DatabaseOperations.AddPlayerPokemon(newPlayerPokemon);

                    // pokemon aanvallen aanmaken om te inserten
                    foreach (var item in attacks)
                    {
                        OwnedPokemonAttack attack = new OwnedPokemonAttack
                        {
                            CurrentPp = item.CurrentPp,
                            PokemonId = id,
                            AttackId  = item.AttackId,
                        };
                        if (item.KnownAttack == true)
                        {
                            attack.KnownAttack = true;
                        }
                        else
                        {
                            attack.KnownAttack = false;
                        }



                        DatabaseOperations.AddCaughtPokemonAttacks(attack);
                    }

                    txtInformation.Text               = $"Congratulations , You caught a {pokemon.Pokedex.Name}!";
                    imgEnemyPokemon.Source            = new BitmapImage(new Uri(@"images\sprites\pokeball.png", UriKind.Relative));
                    imgEnemyPokemon.Width             = 50;
                    imgEnemyPokemon.Height            = 50;
                    imgEnemyPokemon.VerticalAlignment = VerticalAlignment.Center;

                    return(true);
                }
                else
                {
                    txtInformation.Text = $"{pokemon.Pokedex.Name} broke free, Try again!";

                    return(false);
                }
            }
            else
            {
                txtInformation.Text = $"You can't catch another trainer's pokemon";

                return(false);
            }
        }