/// <summary>
        ///     U7 - Koniec opravy
        /// </summary>
        /// Naplánujem:
        /// - Začiatok opravy - Ak nie je front pokazených prázdny, tak vyberiem pokazené auto, a naplánujem udalosť okamžite.
        /// - Uvoľnenie pracovníka – ak je front pokazených áut, tak zvýšim počet voľných pracovníkov.
        /// - Preparkovanie auta späť zákazníkovi – ak je voľný pracovník skupiny 1. Vygenerujem čas Generátorom 5 – Preparkovanie auta späť.
        /// - Front opravených áut – ak nie je voľný pracovník skupiny 1, tak opravené auto vložím do frontu opravených áut, kde to auto bude čakať na vyzdvihnutie pracovníkom skupiny 1.
        public override void Execute()
        {
            ((AppCore)ReferenceSimCore).CelkovyPocetOpravenychAut++;

            if (((AppCore)ReferenceSimCore).JeVolnyPracovnik1())
            {
                ((AppCore)ReferenceSimCore).ObsadPracovnikaSkupiny1();
                //preparkujem spat
                var casPreparkovania  = EventTime + ((AppCore)ReferenceSimCore).Gen.Generator5_Preparkovanie();
                var preparkovanieSpat = new PreparkovanieAutaSpatEvent(casPreparkovania, ReferenceSimCore,
                                                                       AktualnyZakaznik);
                ((AppCore)ReferenceSimCore).ScheduleEvent(preparkovanieSpat);
            }
            else
            {
                //vlozim do frontu opravenych aut
                ((AppCore)ReferenceSimCore).Front_OpraveneAuta_Pridaj(AktualnyZakaznik);
            }


            //vyberiem auto z frontu
            var pokazeneAuto = ((AppCore)ReferenceSimCore).Front_PokazeneAuta_Vyber();

            if (pokazeneAuto != null)
            {
                //zacnem opravovat dalsie auto
                var zacniOpravovat = new ZaciatokOpravyEvent(EventTime, ReferenceSimCore, pokazeneAuto);
                ((AppCore)ReferenceSimCore).ScheduleEvent(zacniOpravovat);
            }
            else
            {
                //uvolni pracovnika sk. 2
                ((AppCore)ReferenceSimCore).UvolniPracovnikaSkupiny2();
            }
        }
        /// <summary>
        ///     U5 - Preparkovanie auta k dielni
        /// </summary>
        /// Vyberiem opravené auto z frontu opravených áut.
        /// Naplánujem:
        /// -	Začiatok opravy v okamžitom čase, ak je voľný pracovník skupiny 2. Obsadím pracovníka 2 skupiny.
        /// -	Front pokazených áut - Pridám auto (aktuálneho zákazníka) do frontu pokazených áut, ak existuje a zároveň nie je voľný pracovník skupiny 2.
        /// -	Preparkovanie auta späť zákazníkovi – prioritne (pracovníci skupiny 1 uprednostňujú vrátenie opraveného auta zákazníkovi pred prijatím novej objednávky). Vyberiem opravené auto z frontu opravených áut. Ak nie je front opravených prázdny, tak naplánujem udalosť s vygenerovaným časom Generátora 5 – preparkovanie s opraveným autom.
        /// -	Začiatok spracovania objednávky  - s druhou prioritou, ak je front opravených áut prázdny a zároveň nie je front čakajúcich zákazníkov prázdny. Vyberiem zákazníka z frontu čakajúcich zákazníkov. Naplánujem okamzite.
        /// -	Uvoľnenie pracovníka – ak front opravených áut prázdny, a zároveň front čakajúcich zákazníkov, tak uvoľním pracovníka skupiny 1.
        public override void Execute()
        {
            if (AktualnyZakaznik != null)
            {
                if (((AppCore)ReferenceSimCore).JeVolnyPracovnik2())
                {
                    ((AppCore)ReferenceSimCore).ObsadPracovnikaSkupiny2();

                    //naplanujem zaciatok opravy
                    var oprava = new ZaciatokOpravyEvent(EventTime, ReferenceSimCore, AktualnyZakaznik);
                    ReferenceSimCore.ScheduleEvent(oprava);
                }
                else
                {
                    //vlozim do frontu auto pokazenych aut
                    ((AppCore)ReferenceSimCore).Front_PokazeneAuta_Pridaj(AktualnyZakaznik);
                }
            }

            var opraveneAuto = ((AppCore)ReferenceSimCore).Front_OpraveneAuta_Vyber();

            //PRIORITNE
            if (opraveneAuto != null)
            {
                //cas preparkovanie spat
                var casPreparkovania = EventTime + ((AppCore)ReferenceSimCore).Gen.Generator5_Preparkovanie();

                //vyberiem auto z frontu
                //preparkovanie auta naspat
                var preparkovanieNaspat = new PreparkovanieAutaSpatEvent(casPreparkovania, ReferenceSimCore,
                                                                         opraveneAuto);
                ReferenceSimCore.ScheduleEvent(preparkovanieNaspat);
            }
            else
            {
                ((AppCore)ReferenceSimCore).S2_AddValue();
                var cakajuciZakaznik = ((AppCore)ReferenceSimCore).Front_CakajuciZakaznici_VyberZakaznika();

                //NEPRIORITNE
                if (cakajuciZakaznik != null)
                {
                    //vyberiem z frontu cakajucich zakaznikov
                    //naplanujem zaciatok obsluhy
                    var zaciatokObsluhy = new ZaciatokSpracovaniaObjednavkyEvent(EventTime, ReferenceSimCore,
                                                                                 cakajuciZakaznik);
                    ReferenceSimCore.ScheduleEvent(zaciatokObsluhy);
                }
                else
                {
                    //uvolnim pracovnika 1
                    ((AppCore)ReferenceSimCore).UvolniPracovnikaSkupiny1();
                }
            }
        }