// Dus bij singleton maar max 1 instantie

        // non-thread safe
        //public static EmployeeServices Instance()// Dit noemt altijd Instance!
        //{
        //
        //        instance = new EmployeeServices();
        //
        //    return instance; // Dus als je instance oproept (via Instance methode) dan maak je de list.
        //}

        // thread safe --> dit moet bij de critical session, dit is de critical session
        public static EmployeeServices Instance() // Dit noemt altijd Instance!
        {
            if (instance == null)                 // nu 100% zeker dat dit thread safe is. 100% goed. Dit is GMP maar moet niet van Kenan
            {
                lock (_lock)                      // Dit maakt het redelijk thread safe (99% goed)
                {
                    if (instance == null)         // controle hier ook
                    {
                        instance = new EmployeeServices();
                    }
                }
            }
            return(instance); // Dus als je instance oproept (via Instance methode) dan maak je de list.
        }
        static void Main(string[] args)
        {
            // Static class heeft geen instanties. Maar static class is lastig. Voor opslaan van gegevens is dit slecht
            // Deze static class wordt opgemaakt en blijft in het geheugen tot zolang de app loopt.
            // Daarin heeft singleton een voordeel. Je hebt hier maar 1 instantie nodig ipv meerdere. Minder lastig voor het geheugen
            // Dit is ook beter voor unit testing en wordt erg veel gebruikt bij loggers

            // Dit is puur voor GIt, nedeer dit maar
            Employee emp1 = new Employee();

            emp1.FirstName = "Kenan";
            emp1.LastName  = "Kurda";
            Employee emp2 = new Employee();

            emp2.FirstName = "Jan";
            emp2.LastName  = "Martens";
            Employee emp3 = new Employee();

            emp3.FirstName = "Kevin";
            emp3.LastName  = "Burghaus";
            Employee emp4 = new Employee();

            emp4.FirstName = "Arek";
            emp4.LastName  = "IetsPools";
            Employee emp5 = new Employee();

            emp5.FirstName = "Bol";
            emp5.LastName  = "Bauwens";

            EmployeeServices empServices = EmployeeServices.Instance(); // Een nieuwe class gemaakt

            // Deze kun je meerdere keren aanroepen maar hij maakt toch maar eentje aan!

            empServices.AddEmployees(emp1);
            empServices.AddEmployees(emp2);
            empServices.AddEmployees(emp3);
            empServices.AddEmployees(emp4);
            empServices.AddEmployees(emp5);

            List <Employee> LijstMetNaam = empServices.GetEmployeesByFirstName("Ke"); // ik kan ook var gebruiken ipv de lijst

            foreach (var item in LijstMetNaam)
            {
                Console.WriteLine($"{item.FirstName} {item.LastName}"); // 2 namen met "Ke" erin!
            }

            Console.ReadLine();
        }