/// <summary>
        /// Checkt of alle velden voor een reservering ingevuld zijn
        /// </summary>
        /// <param name="reservering">De reservering die gecheckt moet worden</param>
        /// <returns>true als alle velden ingevuld zijn, anders false</returns>
        private bool AddReservering(Reservering reservering) //checkt of een reservering gemaakt kan worden
        {
            if (reservering.Tijd != 0 && reservering.Datum != "" && reservering.Personen != 0 && (reservering.Bestelling != null))
            {
                Reservering[] newReserveringen;
                if (this.Reserveringen != null)
                {
                    newReserveringen = new Reservering[this.Reserveringen.Length + 1];
                    for (int i = 0; i < Reserveringen.Length; i++)
                    {
                        newReserveringen[i] = Reserveringen[i];
                    }
                    newReserveringen[Reserveringen.Length] = reservering;
                }
                else
                {
                    newReserveringen = new Reservering[] { reservering }
                };
                this.Reserveringen = newReserveringen;
                Console.WriteLine(TheFatDuckRestaurant.ASCIIART.ReserverenArt());
                Console.WriteLine("U heeft gereserveerd!\x0a\x0a" + "Enter: Ga terug naar het startscherm");
                Console.ReadKey();
                return(true);
            }
            string Message = "";

            Message += reservering.Datum == "" ? "U heeft nog geen datum ingevuld\x0a" : "";
            Message += reservering.Tijd == 0 ? "U heeft nog geen tijd ingevuld\x0a" : "";
            Message += reservering.Personen == 0 ? "U heeft nog niet het aantal personen aangegeven\x0a" : "";
            Message += (reservering.Bestelling == null) ? "U heeft nog geen gerechten gekozen\x0a" : "";
            Console.WriteLine(TheFatDuckRestaurant.ASCIIART.ReserverenArt());
            Console.WriteLine(Message + "\x0a" + "Enter: Ga terug naar het vorige scherm");
            Console.ReadKey();
            return(false);
        }
 public void removeReservering(Reservering reservering, TafelArray tafels)
 {
     reservering.RemoveTafels(tafels, true);
     Reservering[] newReserveringen = new Reservering[this.Reserveringen.Length - 1];
     for (int i = 0, j = 0; i < this.Reserveringen.Length; i++)
     {
         if (this.Reserveringen[i] != reservering)
         {
             newReserveringen[j++] = this.Reserveringen[i];
         }
     }
     this.Reserveringen = newReserveringen;
 }
        public ReserveerLijst BekijkReserveringenMedewerker(TafelArray tafels)
        {
            if (Reserveringen == null)
            {
                Reserveringen = new Reservering[0];
            }
            if (Reserveringen.Length == 0)
            {
                Console.Clear();
                Console.WriteLine(ASCIIART.ReserveringenArt());
                Console.WriteLine("Er zijn nog geen reserveringen gemaakt\x0a\x0a" + "Klik op een toets om terug te gaan");
                Console.ReadKey();
                return(this);
            }
            while (true)
            {
                Console.Clear();
                Console.WriteLine(ASCIIART.ReserveringenArt());
                Console.WriteLine("Voor welke datum wilt u de reserveringen bekijken? (21 juni)\n\nEnter: Ga terug naar het vorige scherm");
                string datum = Console.ReadLine();
                datum.ToLower();
                Console.Clear();
                if (datum == "")
                {
                    return(this);
                }

                datum = CheckDatum.checkDatum(datum);
                int AantalRelevanteReserveringen = BerekenRelevanteReserveringen(datum);
                if (AantalRelevanteReserveringen <= 0)
                {
                    Console.Clear();
                    Console.WriteLine(ASCIIART.ReserveringenArt());
                    Console.WriteLine("Er zijn nog geen reserveringen gedaan voor deze datum of de datum is ongeldig. Klik op een toets om terug te gaan.\x0a");
                    Console.ReadKey();
                }
                else
                {
                    Reservering[] RelevanteReserveringen = new Reservering[AantalRelevanteReserveringen];
                    int           j = 0;
                    foreach (Reservering reservering in Reserveringen)
                    {
                        if (reservering.Datum == datum)
                        {
                            RelevanteReserveringen[j++] = reservering;
                        }
                    }
                    BekijkSpecifiekePaginaMedewerker(RelevanteReserveringen, tafels, datum);
                }
            }
        }
        public void BekijkSpecifiekeReserveringMedewerker(Reservering reservering, TafelArray tafels) //Laat een specifieke reservering zien, met de opties om tafels toe te voegen of te verwijderen, als dit mogelijk is.
        {
            bool wrongInput = false;

            while (true)
            {
                Console.Clear();
                reservering.Info();
                bool heeftTafelsNodig = reservering.HeeftTafelsNodig();
                bool heeftTafels      = reservering.HeeftTafels();
                if (heeftTafelsNodig)
                {
                    Console.WriteLine("\nA: Tafels koppelen");
                }
                if (heeftTafels)
                {
                    Console.WriteLine("\nB: Tafels ontkoppelen");
                }
                Console.WriteLine("0: Terug");
                if (wrongInput)
                {
                    Console.WriteLine("Verkeerde Input!");
                }
                char userInput = Console.ReadKey().KeyChar;
                if (userInput == '0')
                {
                    return;
                }
                else if (userInput == 'A' && heeftTafelsNodig)
                {
                    reservering.AddTafels(tafels);
                }
                else if (userInput == 'B' && heeftTafels)
                {
                    reservering.RemoveTafels(tafels);
                }
                else
                {
                    wrongInput = true;
                }
            }
        }
        public void changeReservering(Reservering reservering, TafelArray tafels)
        {
            while (true)
            {
                Console.Clear();
                reservering.Info();
                Console.WriteLine("\nR: Verwijder reservering\n0: Terug");
                ConsoleKeyInfo toetsUser     = Console.ReadKey();
                char           toetsUserChar = toetsUser.KeyChar;
                if (toetsUserChar == '0')
                {
                    return;
                }
                if (toetsUserChar == 'R' || toetsUserChar == 'r')
                {
                    while (true)
                    {
                        Console.Clear();
                        Console.WriteLine(ASCIIART.ReserverenArt());
                        Console.WriteLine($"Weet u zeker dat u uw reservering voor {reservering.Datum} wil verwijderen?\n\nR: Verwijder reservering\n0: Terug");

                        ConsoleKeyInfo toetsUserBevestig     = Console.ReadKey();
                        char           toetsUserBevestigChar = toetsUserBevestig.KeyChar;

                        if (toetsUserBevestigChar == '0')
                        {
                            break;
                        }
                        if (toetsUserBevestigChar == 'r' || toetsUserBevestigChar == 'R')
                        {
                            removeReservering(reservering, tafels);
                            Console.Clear();
                            Console.WriteLine(ASCIIART.ReserverenArt());
                            Console.WriteLine("Uw reservering is succesvol verwijderd\n\n0: Terug");
                            Console.ReadKey();
                            return;
                        }
                    }
                }
            }
        }
        /// <summary>
        /// creƫert een nieuwe reservering
        /// </summary>
        /// <param name="klant">Gebruikersnaam van de klant</param>
        /// <param name="menu">Het menu</param>
        /// <returns>false als de reservering geannuleerd wordt, anders true</returns>
        public bool createReservering(string klant, Menu menu)
        {
            Reservering NieuweReservering = new Reservering(0, "", 0, klant, null);

            while (true)
            {
                switch (NieuweReservering.Create())
                {
                case '1':     //datum veranderen
                    string NieuweDatum = NieuweReservering.changeDatum();
                    if (NieuweDatum != null)
                    {
                        if (NieuweReservering.Personen <= VrijePlaatsen(NieuweReservering.Tijd, NieuweDatum))
                        {
                            NieuweReservering.Datum = NieuweDatum;
                        }
                        else
                        {
                            Console.Clear();
                            Console.WriteLine(TheFatDuckRestaurant.ASCIIART.ReserverenArt());
                            Console.WriteLine("Er zijn niet genoeg vrije plaatsen op deze dag op dit tijdstip\x0a\x0a" + "Enter: Ga terug naar het vorige scherm");
                            Console.ReadKey();
                        }
                    }
                    break;

                case '2':     //tijd veranderen
                    int NieuweTijd = NieuweReservering.changeTijd();
                    if (NieuweTijd != 0)
                    {
                        if (NieuweReservering.Personen <= VrijePlaatsen(NieuweTijd, NieuweReservering.Datum))
                        {
                            NieuweReservering.Tijd = NieuweTijd;
                        }
                        else
                        {
                            Console.WriteLine(TheFatDuckRestaurant.ASCIIART.ReserverenArt());
                            Console.WriteLine("Er zijn niet genoeg vrije plaatsen op deze dag op dit tijdstip\x0a\x0a" + "Enter: Ga terug naar het vorige scherm");
                            Console.ReadKey();
                        }
                    }
                    break;

                case '3':     //aantal personen veranderen
                    NieuweReservering.changePersonen(VrijePlaatsen(NieuweReservering.Tijd, NieuweReservering.Datum));
                    break;

                case '4':     //gerechten veranderen
                    Console.WriteLine(TheFatDuckRestaurant.ASCIIART.ReserverenArt());
                    NieuweReservering.changeGerechten(menu);
                    break;

                case '5':     //reservering bevestigen
                    if (AddReservering(NieuweReservering))
                    {
                        return(true);
                    }
                    break;

                case '0':     //reservering verwijderen/annuleren
                    Console.WriteLine(TheFatDuckRestaurant.ASCIIART.ReserverenArt());
                    Console.WriteLine("De reservering is geannuleerd\x0a");
                    Console.WriteLine("Enter: Ga terug naar het startscherm");
                    Console.ReadKey();
                    return(false);

                default:
                    Console.WriteLine(TheFatDuckRestaurant.ASCIIART.ReserverenArt());
                    Console.WriteLine("Dit is geen geldige input\x0a\x0a" + "Enter: Ga terug naar het vorige scherm");
                    Console.ReadKey();
                    break;
                }
            }
        }
        public void BekijkReserveringenKlant(string klantNaam, TafelArray tafels)
        {
            if (Reserveringen == null) //als er geen reserveringen zijn nog, maakt een nieuwe reservering aan met 0.
            {
                Reserveringen = new Reservering[0];
            }

            if (Reserveringen.Length == 0) //als er 0 reserveringen zijn voor de klant dan returnt de code
            {
                Console.Clear();
                Console.WriteLine(ASCIIART.ReserverenArt());
                Console.WriteLine("U heeft nog geen reserveringen gemaakt\x0a\x0a" + "Enter: Ga terug naar het startscherm");
                Console.ReadKey();
                return;
            }
            int huidigePaginaNR = 0;

            while (true)
            {
                int Aantal = 0;
                foreach (Reservering reservering in Reserveringen)
                {
                    if (reservering.Bezoeker == klantNaam)
                    {
                        Aantal++;
                    }
                }
                if (Aantal == 0)
                {
                    return;
                }
                Reservering[] KlantReserveringen = new Reservering[Aantal];
                int           j = 0;
                for (int i = 0; i < Reserveringen.Length; i++)
                {
                    if (Reserveringen[i].Bezoeker == klantNaam)
                    {
                        KlantReserveringen[j++] = Reserveringen[i];
                    }
                }
                int hoeveelheidPaginas = (int)Math.Ceiling(KlantReserveringen.Length / 7.0);
                Console.Clear();
                Console.WriteLine(ASCIIART.ReserveringenArt());
                Console.WriteLine($"Pagina {huidigePaginaNR + 1}/{hoeveelheidPaginas}\n");
                for (int i = 0; i < 7 && i + huidigePaginaNR * 7 < KlantReserveringen.Length; i++)
                {
                    Console.WriteLine($"{i + 1}: {KlantReserveringen[i + huidigePaginaNR * 7].Datum} om {KlantReserveringen[i + huidigePaginaNR * 7].TijdString()} ({KlantReserveringen[i + huidigePaginaNR * 7].Personen} personen)");
                }

                Console.WriteLine();
                if (huidigePaginaNR + 1 < hoeveelheidPaginas)
                {
                    Console.WriteLine("8: Volgende pagina");
                }
                if (huidigePaginaNR + 1 >= hoeveelheidPaginas && (hoeveelheidPaginas > 1))
                {
                    Console.WriteLine("9: Vorige pagina");
                }
                Console.WriteLine("0: Ga terug naar het startscherm");
                int Index = Int32.Parse(Console.ReadKey().KeyChar.ToString());
                Console.Clear();
                if (Index == 0)
                {
                    return;
                }
                if (Index < 7 && Index > 0)
                {
                    changeReservering(KlantReserveringen[Index - 1], tafels);
                }
                else if (Index == 8 && huidigePaginaNR + 1 < hoeveelheidPaginas)
                {
                    huidigePaginaNR++;
                }
                else if (Index == 9 && huidigePaginaNR + 1 >= hoeveelheidPaginas && (hoeveelheidPaginas > 1))
                {
                    huidigePaginaNR--;
                }
                else
                {
                    Console.WriteLine("Dit is geen geldige input\x0a\x0a" + "Enter: Ga terug naar het vorige scherm");
                    Console.ReadKey();
                }
            }
        }