private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Border       thisBorder     = sender as Border;
            PokemonGroup currentPokemon = new PokemonGroup();

            switch (thisBorder.Name)
            {
            case "Card1":
                currentPokemon = Pokemonparty[0];
                break;

            case "Card2":
                currentPokemon = Pokemonparty[1];
                break;

            case "Card3":
                currentPokemon = Pokemonparty[2];
                break;

            case "Card4":
                currentPokemon = Pokemonparty[3];
                break;

            case "Card5":
                currentPokemon = Pokemonparty[4];
                break;

            case "Card6":
                currentPokemon = Pokemonparty[5];
                break;

            default:
                MessageBox.Show("???");
                break;
            }

            //In geval dat er links word geklikt, word het infoscherm van de geklikte pokemon geopend
            PokemonInfo infoscreen = new PokemonInfo
            {
                pokemonstats = DatabaseOperations.SelectPokemonFromParty(currentPokemon)
            };

            Visibility = Visibility.Hidden;
            //Topmost forceerd een hogere z-index zodat mainwindow zich niet bovenop dit scherm plaatst wanneer info gesloten is
            Topmost = false;
            infoscreen.ShowDialog();
            Topmost = true;

            Visibility = Visibility.Visible;
        }
        private void cmbPosition_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //Positie aanpassen word gezien als een directe handeling, en word uitgevoerd voor dat andere veranderingen ingerekent kunnen worden
            PokemonGroup pokemonToSwap = DatabaseOperations.SelectPokemonFromParty(currentTrainer.Id, int.Parse(cmbPosition.SelectedItem.ToString()));
            int          position1     = CurrentPkmParty.Position;
            int          position2     = pokemonToSwap.Position;

            CurrentPkmParty.Position = position2;
            pokemonToSwap.Position   = position1;
            if (DatabaseOperations.ChangePosition(CurrentPkmParty) != 0 && DatabaseOperations.ChangePosition(pokemonToSwap) != 0)
            {
                MessageBox.Show($"Position changed, {CurrentPkmParty.Pokemon.Nickname} has been swapped with {pokemonToSwap.Pokemon.Nickname}");
            }
            else
            {
                MessageBox.Show("Position swap unsuccessful");
            }
        }
        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 Border_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
            Border       thisBorder     = sender as Border;
            PokemonGroup currentPokemon = new PokemonGroup();

            switch (thisBorder.Name)
            {
            case "Card1":
                currentPokemon = Pokemonparty[0];
                break;

            case "Card2":
                currentPokemon = Pokemonparty[1];
                break;

            case "Card3":
                currentPokemon = Pokemonparty[2];
                break;

            case "Card4":
                currentPokemon = Pokemonparty[3];
                break;

            case "Card5":
                currentPokemon = Pokemonparty[4];
                break;

            case "Card6":
                currentPokemon = Pokemonparty[5];
                break;

            default:
                MessageBox.Show("???");
                break;
            }
            //In geval je een rechterklik voor een pokemon doet, word deze pokemon naar de CRUD geladen voor delete en update operaties
            PokemonPartyCRUD CRUDwindow = new PokemonPartyCRUD();

            CRUDwindow.btnChange.IsEnabled  = true;
            CRUDwindow.btnDelete.IsEnabled  = true;
            CRUDwindow.cmbPokemon.IsEnabled = false;
            CRUDwindow.cmbPosition.Items.Clear();
            for (int i = 0; i < Pokemonparty.Count(); i++)
            {
                //Zorg dat alle momentele posities ingeladen worden, zodat je enkel kan wisselen met een bestaande pokemon
                CRUDwindow.cmbPosition.Items.Add(i + 1);
            }

            //Instellen van gegevens
            CRUDwindow.CurrentPkmParty           = currentPokemon;
            CRUDwindow.CurrentPkm                = currentPokemon.Pokemon;
            CRUDwindow.cmbPosition.SelectedIndex = currentPokemon.Position - 1;
            CRUDwindow.cmbPokemon.SelectedIndex  = (int)currentPokemon.Pokemon.PokedexID - 1;
            CRUDwindow.cmbAbility.SelectedIndex  = (int)currentPokemon.Pokemon.AbilityID - 1;
            CRUDwindow.txtLvl.Text               = currentPokemon.Pokemon.PokemonLevel.ToString();
            CRUDwindow.txtName.Text              = currentPokemon.Pokemon.Nickname;
            CRUDwindow.cmbGender.SelectedIndex   = Convert.ToInt32(currentPokemon.Pokemon.Gender);
            CRUDwindow.currentTrainer            = trainerParty;
            Topmost = false;
            CRUDwindow.ShowDialog();
            Topmost = true;

            //Hernieuw de lijst zodat de veranderingen gereflecteerd zijn in deze pagina
            Pokemonparty.Clear();
            foreach (Border card in Cards)
            {
                card.Visibility = Visibility.Collapsed;
            }
            Pokemonparty = DatabaseOperations.SelectParty(trainerParty.Id);
            LoadPokemon();
        }