/// <summary>
        /// Checkt of de gegeven gebruikersnaam bestaat voor de gegeven gebruikerType
        /// Checkt of het wachtwoord bij de gebruikersnaam hoort
        /// Logt de gebruiker in
        /// </summary>
        /// <param name="gebruikerType">Welk soort gebruiker (klant,medewerker,eigenaar)</param>
        /// <returns>De ingelogde gebruiker</returns>
        public Gebruiker logIn(string gebruikerType)
        {
            Func <Gebruiker, Tuple <bool, string> > CheckWachtwoord = (gebruikerObject) =>
            {
                SecureString pass  = VarComponents.MaskStringInput();
                string       Input = new System.Net.NetworkCredential(string.Empty, pass).Password;
                return(Tuple.Create(Input == gebruikerObject.Wachtwoord || Input == "0", Input));
            };

            while (true)
            {
                bool       NaamBestaat      = false;
                Klant      klantObject      = null;
                Medewerker medewerkerObject = null;
                Eigenaar   eigenaarObject   = null;

                Console.Clear();
                Console.WriteLine(ASCIIART.LoginArt());
                Console.WriteLine("Voer uw gebruikersnaam in\x0A\x0A" + "0: Terug");
                string GegevenNaam = Console.ReadLine();
                if (GegevenNaam == "0")
                {
                    return(new Gebruiker("", "", "", ""));
                }

                if (gebruikerType == "Klant")
                {
                    foreach (Klant klant in Klanten)
                    {
                        if (GegevenNaam == klant.Naam)
                        {
                            NaamBestaat = true;
                            klantObject = klant;
                        }
                    }
                }
                else if (gebruikerType == "Medewerker")
                {
                    foreach (Medewerker medewerker in Medewerkers)
                    {
                        if (GegevenNaam == medewerker.Naam)
                        {
                            NaamBestaat      = true;
                            medewerkerObject = medewerker;
                        }
                    }
                }
                else
                {
                    if (GegevenNaam == Eigenaar.Naam)
                    {
                        NaamBestaat    = true;
                        eigenaarObject = Eigenaar;
                    }
                }
                if (NaamBestaat)
                {
                    Tuple <bool, string> Password = Tuple.Create(false, "");
                    Console.Clear();
                    Console.WriteLine(ASCIIART.LoginArt());
                    Console.WriteLine($"Gebruikersnaam: {GegevenNaam}\x0A\x0AVoer uw wachtwoord in:");
                    if (gebruikerType == "Klant")
                    {
                        Password = CheckWachtwoord(klantObject);
                    }
                    else if (gebruikerType == "Medewerker")
                    {
                        Password = CheckWachtwoord(medewerkerObject);
                    }
                    else
                    {
                        Password = CheckWachtwoord(eigenaarObject);
                    }
                    while (!Password.Item1)
                    {
                        Console.Clear();
                        Console.WriteLine(ASCIIART.LoginArt());
                        Console.WriteLine("Verkeerd wachtwoord\x0A\x0A\x0AVoer uw wachtwoord in:\x0A\x0A" + "0: Terug");
                        if (klantObject != null)
                        {
                            Password = CheckWachtwoord(klantObject);
                        }
                        else
                        {
                            Password = CheckWachtwoord(medewerkerObject);
                        }
                    }
                    if (Password.Item2 != "0")
                    {
                        Console.Clear();
                        Console.WriteLine(ASCIIART.LoginArt());
                        Console.WriteLine("U bent ingelogd!\x0A\x0A" + "0: Naar het startscherm");
                        Console.ReadKey();
                        if (klantObject != null)
                        {
                            return(klantObject);
                        }
                        else if (medewerkerObject != null)
                        {
                            return(medewerkerObject);
                        }
                        else
                        {
                            return(eigenaarObject);
                        }
                    }
                }
                else
                {
                    Console.Clear();
                    Console.WriteLine(ASCIIART.LoginArt());
                    Console.WriteLine("Verkeerde gebruikersnaam.\x0A\x0A" + "Enter: Probeer opnieuw in te loggen\x0A\x0A" + "0: Terug");
                    if (Console.ReadKey().KeyChar == '0')
                    {
                        return(new Gebruiker("", "", "", ""));
                    }
                }
            }
        }
        public Tuple <string, string, string, string> registreer() //Returned een Tuple met naam,wachtwoord,adres en woonplaats voor registreerKlant en registreerMedewerker functies.
        {
            var jsonOptions = new JsonSerializerOptions
            {
                WriteIndented = true,
            };

            Console.Clear();
            Console.WriteLine(ASCIIART.RegistrerenArt());
            Console.WriteLine("Voer een gebruikers naam in die alleen cijfers en/of letters bevat:\n0: Terug");
            var naamInput = Console.ReadLine();

            while (!VarComponents.IsUsername(naamInput))
            {
                Console.Clear();
                Console.WriteLine(ASCIIART.RegistrerenArt());
                Console.WriteLine("Verkeerde gebruikers naam\x0A\x0A\x0AVoer een gebruikers naam in die alleen cijfers en/of letters bevat:");
                naamInput = Console.ReadLine();
            }

            bool uniekeNaam = false;

            while (!uniekeNaam)
            {
                bool uniekKlant      = true;
                bool uniekMedewerker = true;
                bool uniekEigenaar   = true; //3 booleans voor iedere array.

                if (naamInput != "0")
                {
                    foreach (var klant in Klanten) //Checkt per klant in de Klanten array of de naam al bestaat
                    {
                        if (klant.Naam == naamInput)
                        {
                            uniekKlant = false;
                            break;
                        }
                    }
                    foreach (var medewerker in Medewerkers) //Checkt per medewerker in de Medewerkers array of de naam al bestaat
                    {
                        if (medewerker.Naam == naamInput)
                        {
                            uniekMedewerker = false;
                            break;
                        }
                    }
                    if (Eigenaar.Naam == naamInput)
                    {
                        uniekEigenaar = false;
                    }

                    if (uniekEigenaar == false || uniekKlant == false || uniekMedewerker == false)
                    {
                        Console.Clear();
                        Console.WriteLine(ASCIIART.RegistrerenArt());
                        Console.WriteLine("Deze naam bestaat al in het systeem!\x0A\x0A\x0AVoer een gebruikers naam in die alleen cijfers en letters bevat:\n0: Terug");
                        naamInput = Console.ReadLine();
                    }
                    else
                    {
                        uniekeNaam = true;
                    }
                }
                else
                {
                    return(null);
                }
            }

            Console.Clear();
            Console.WriteLine(ASCIIART.RegistrerenArt());
            Console.WriteLine("Voer een wachtwoord in van minimaal 8 tekens waarvan minimaal 1 Hoofdletter, 1 cijfer en 1 speciaal karakter:");
            SecureString pass1    = VarComponents.MaskStringInput();
            string       password = new System.Net.NetworkCredential(string.Empty, pass1).Password;

            while (!VarComponents.IsPassword(password))
            {
                Console.Clear();
                Console.WriteLine(ASCIIART.RegistrerenArt());
                Console.WriteLine("Verkeerd wachtwoord\x0A\x0A\x0AVoer uw wachtwoord in van minimaal 8 tekens waarvan minimaal 1 Hoofdletter, 1 cijfer en 1 speciaal karakter:");
                SecureString pass2 = VarComponents.MaskStringInput();
                password = new System.Net.NetworkCredential(string.Empty, pass2).Password;
            }

            Console.Clear();
            Console.WriteLine(ASCIIART.RegistrerenArt());
            Console.WriteLine("Voer een adres in (straatnaam en huisnummer):");
            string adres = Console.ReadLine();

            while (!VarComponents.IsAdres(adres))
            {
                Console.Clear();
                Console.WriteLine(ASCIIART.RegistrerenArt());
                Console.WriteLine("Verkeerd adres\x0A\x0A\x0AVoer uw adres in (straatnaam en huisnummer):");
                adres = Console.ReadLine();
            }

            Console.Clear();
            Console.WriteLine(ASCIIART.RegistrerenArt());
            Console.WriteLine("Voer een woonplaats in:");
            string woonplaats = Console.ReadLine();

            while (!VarComponents.IsWoonplaats(woonplaats))
            {
                Console.Clear();
                Console.WriteLine(ASCIIART.RegistrerenArt());
                Console.WriteLine("Verkeerde woonplaats\x0A\x0A\x0AVoer uw woonplaats in:");
                woonplaats = Console.ReadLine();
            }

            Tuple <string, string, string, string> returnTuple = Tuple.Create(naamInput, password, adres, woonplaats);

            return(returnTuple);
        }