/// <summary>
 /// Laat de gegevens van de reservering zien
 /// </summary>
 public void Info()
 {
     Console.WriteLine(ASCIIART.ReserverenArt());
     Console.WriteLine("Klant:\t\t" + this.Bezoeker);
     Console.WriteLine("Tijd:\t\t" + TijdString());
     Console.WriteLine("Datum:\t\t" + this.Datum);
     Console.WriteLine("Personen:\t" + this.Personen);
     Console.WriteLine("Gerechten:");
     Console.OutputEncoding = System.Text.Encoding.UTF8;
     foreach (var bestellingItem in this.Bestelling)
     {
         string totaalprijs = "" + bestellingItem.TotaalPrijs;
         totaalprijs += (!totaalprijs.Contains(',') ? ",-" : totaalprijs[totaalprijs.Length - 2] == ',' ? "0" : "");
         Console.Out.WriteLine($"- {bestellingItem.Naam}: ({bestellingItem.Aantal}x), €{totaalprijs}");
     }
     Console.WriteLine("Tafels:");
     if (this.Tafels == null)
     {
         Console.WriteLine("Nog geen tafels gekoppeld aan deze reservering.");
     }
     else
     {
         foreach (Tafel tafel in this.Tafels)
         {
             Console.WriteLine($"- {tafel.ID}: {tafel.Plekken} plekken");
         }
     }
 }
        /// <summary>
        /// Doet he tzelfde als ShowItemHandler maar geeft ook de optie om het gerecht toe te voegen aan een reservering
        /// </summary>
        /// <param name="geladenMenu">Array met het type gerecht</param>
        /// <param name="toetsUserChar">Index van het type gerecht</param>
        /// <param name="paginaNR">Index van op welke pagina het gerecht zich bevindt</param>
        /// <returns></returns>
        private Bestelling ShowItemReserveringHandler(Gerecht[] geladenMenu, char toetsUserChar, int paginaNR) //Toont informatie over specifiek gerecht en geeft optie om het item toe te voegen aan je reservering
        {
            try
            {
                bool specifiekPassed = false;
                while (true)
                {
                    ShowItemStandaard(geladenMenu[(Int32.Parse(toetsUserChar.ToString()) - 1) + (7 * paginaNR)]); //7 * paginaNR zorgt ervoor dat het juiste item wordt laten zien
                    Console.WriteLine("\nR: Toevoegen aan reservering");
                    Console.WriteLine($"0 : Terug");
                    ConsoleKeyInfo toetsUsr     = Console.ReadKey();
                    char           toetsUsrChar = toetsUsr.KeyChar;

                    if (toetsUsrChar == 'R' || toetsUsrChar == 'r') //Indien er op R wordt geklikt wordt het item toegevoegd aan de lijst met Bestellingen.
                    {
                        while (specifiekPassed != true)
                        {
                            Console.Clear();
                            Console.WriteLine(ASCIIART.ReserverenArt()); //Vraagt hoeveel je van het item wil toevoegen aan je reservering, indien je 0 klikt ga je terug en voeg je het niet toe.
                            Console.WriteLine("Toets hoeveel u van " + geladenMenu[(Int32.Parse(toetsUserChar.ToString()) - 1) + (7 * paginaNR)].naam + " wil bestellen en enter om dit toe te voegen aan uw reservering\n\n0: Terug");
                            var amountStr = Console.ReadLine();
                            if (amountStr == "0")
                            {
                                break;
                            }
                            try
                            {
                                int amount = Int32.Parse(amountStr); //Als er wel gereserveerd is wordt het item aan de lijst met Bestellingen toegevoegd.
                                if (amount < 100)
                                {
                                    return(new Bestelling(geladenMenu[(Int32.Parse(toetsUserChar.ToString()) - 1) + (7 * paginaNR)].naam, geladenMenu[(Int32.Parse(toetsUserChar.ToString()) - 1) + (7 * paginaNR)].prijs, amount));
                                }
                            }
                            catch { };
                        }
                    }
                    if (toetsUsrChar == '0')
                    {
                        return(null);
                    }
                }
            }
            catch { return(null); }
        }
        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;
                        }
                    }
                }
            }
        }
        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();
                }
            }
        }
        public void changeGerechten(Menu menu)
        {
            while (true)
            {
                Console.Clear();
                Console.WriteLine(TheFatDuckRestaurant.ASCIIART.ReserverenArt());
                Console.WriteLine("1: Bekijk het menu\n2: Bekijk uw gekozen gerechten\n\n0: Ga terug naar het vorige scherm");
                char Input = Console.ReadKey().KeyChar;
                switch (Input)
                {
                case '1':
                    addGerechten(menu);
                    break;

                case '2':
                    if (this.Bestelling == null || this.Bestelling.Count == 0)
                    {
                        Console.Clear();
                        Console.WriteLine(ASCIIART.ReserverenArt());
                        Console.WriteLine("U heeft nog geen gerechten gekozen\nBekijk het menu om gerechten toe te voegen");
                        Console.WriteLine("\n\n0: Ga terug naar het vorige scherm");
                        Console.ReadKey();
                    }
                    else
                    {
                        int huidigePaginaNR = 0;
                        Console.OutputEncoding = System.Text.Encoding.UTF8;
                        while (true)
                        {
                            int hoeveelheidPaginas = (int)Math.Ceiling(this.Bestelling.Count / 7.0);
                            Console.Clear();
                            Console.WriteLine(ASCIIART.ReserverenArt());
                            Console.WriteLine("Dit zijn de huidige gerechten die u heeft besteld\nToets op het getal naast het gerecht om het te verwijderen uit uw reservering\n");
                            Console.WriteLine($"Pagina {huidigePaginaNR + 1}/{hoeveelheidPaginas}\n");
                            for (int i = 0; i < 7 && i + huidigePaginaNR * 7 < this.Bestelling.Count; i++)
                            {
                                string totaalprijs = "" + this.Bestelling[i + huidigePaginaNR * 7].TotaalPrijs;
                                totaalprijs += (!totaalprijs.Contains(',') ? ",-" : totaalprijs[totaalprijs.Length - 2] == ',' ? "0" : "");
                                Console.Out.WriteLine($"{i + 1}: {this.Bestelling[i + huidigePaginaNR * 7].Naam}: {this.Bestelling[i + huidigePaginaNR * 7].Aantal}x, €{totaalprijs}");
                            }
                            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 vorige scherm");
                            int Index = Int32.Parse(Console.ReadKey().KeyChar.ToString());
                            Console.Clear();
                            if (Index == 0)
                            {
                                return;
                            }
                            if (Index < 8 && Index > 0)
                            {
                                string tempName = this.Bestelling[Index - 1 + huidigePaginaNR * 7].Naam;
                                Console.Clear();
                                Console.WriteLine(ASCIIART.ReserverenArt());
                                Console.WriteLine($"Weet u zeker dat u {tempName} wilt verwijderen?\n\n1: Verwijder het gerecht uit uw reservering\n0: Ga terug naar het vorige scherm");
                                char userInput = Console.ReadKey().KeyChar;
                                Console.Clear();
                                switch (userInput)
                                {
                                case '1':
                                    this.Bestelling.RemoveAt(Index - 1 + huidigePaginaNR * 7);
                                    Console.WriteLine(ASCIIART.ReserverenArt());
                                    Console.WriteLine($"{tempName} is verwijderd uit uw reservering!\n\n0: Ga terug naar het vorige scherm");
                                    Console.ReadKey();
                                    break;
                                }
                            }

                            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();
                            }
                        }
                    }
                    break;

                case '0':
                    return;
                }
            }
        }