private static bool PrelaziPonocaXkrajPrograma(Emisija emisija, TvProgram program)
        {
            DateTime datum;

            if (program.GetKrajPrikazivanja() == DateTime.MinValue)
            {
                datum = new DateTime(
                    emisija.GetVrijemePrikazivanja().Year, emisija.GetVrijemePrikazivanja().Month,
                    emisija.GetVrijemePrikazivanja().AddDays(1).Day, 0, 0, 0);
            }
            else
            {
                datum = new DateTime(
                    emisija.GetVrijemePrikazivanja().Year, emisija.GetVrijemePrikazivanja().Month,
                    emisija.GetVrijemePrikazivanja().AddDays(0).Day,
                    program.GetKrajPrikazivanja().Hour, program.GetKrajPrikazivanja().Minute, 0);
            }
            TimeSpan timespan = datum - emisija.GetVrijemePrikazivanja()
                                .AddMinutes(emisija.GetTrajanje());

            if (timespan.TotalMinutes < 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        private static bool ProvjeriMogucnostDodavanja(
            Emisija emisija, IComponentRaspored dan, TvProgram program)
        {
            bool moguceDodati = true;

            if (program.GetPocetakPrikazivanja().TimeOfDay >
                emisija.GetVrijemePrikazivanja().TimeOfDay)
            {
                moguceDodati = false;
            }
            if (PostojiEmisijaKojaPocinjeUNavedenoVrijeme(dan, emisija.GetVrijemePrikazivanja()))
            {
                moguceDodati = false;
            }
            if (PostojiEmisijaKojaSeEmitiraUNavedenoVrijeme(
                    dan, emisija.GetVrijemePrikazivanja(), emisija.GetTrajanje()))
            {
                moguceDodati = false;
            }
            if (PrelaziPonocaXkrajPrograma(emisija, program))
            {
                moguceDodati = false;
            }
            return(moguceDodati);
        }
 /// <summary>
 /// Ovo je DEPRICATED od 30-11
 /// Ovo mi ne pomaze, ovo ima referencu na listu OU prave
 /// </summary>
 /// <param name="prva"></param>
 /// <param name="druga"></param>
 private static void DodajAtributeDrugeEmisijePrvoj(Emisija prva, Emisija druga)
 {
     prva.SetId(druga.GetId());
     prva.SetNaziv(druga.GetNaziv());
     prva.SetVrsta(druga.GetVrsta());
     prva.SetTrajanje(druga.GetTrajanje());
     prva.SetListaOsobaUloga(druga.GetListaOsobaUloga());
 }
        private static bool UspioDodatiIzmeduDvije(TvProgram program, Emisija orig,
                                                   VremenskiPlan plan, int brojDana)
        {
            Emisija emisijaZaDodat = VratiNoviKopiraniObjekt(orig);

            DodajNoveOsobeUlogeEmisije(emisijaZaDodat, plan);
            emisijaZaDodat.SetVrijemePrikazivanja(
                DohvatiVrijemeGdjeEmisijuMoguceUbacitiIzmeduDvijeEmisije(
                    program.GetTjedan()[brojDana - 1], emisijaZaDodat.GetTrajanje()));
            if (emisijaZaDodat.GetVrijemePrikazivanja().TimeOfDay !=
                DateTime.MinValue.TimeOfDay)
            {
                DodjeliRedniBroj(emisijaZaDodat);
                program.GetTjedan()[(brojDana - 1)].AddChild(emisijaZaDodat);
                SubjectOsobaUlogaSingleton subject = SubjectOsobaUlogaSingleton.GetInstance();
                subject.AddObserver(emisijaZaDodat);
                return(true);
            }
            return(false);
        }
        /// <summary>
        /// Ovo je nova, klonira ko bog
        /// </summary>
        /// <param name="origigi">Originalna emisija</param>
        public static Emisija VratiNoviKopiraniObjekt(Emisija origigi)
        {
            Emisija nova = new Emisija();

            int    id       = origigi.GetId();
            string naziv    = origigi.GetNaziv();
            int    vrstaId  = origigi.GetVrsta();
            int    trajanje = origigi.GetTrajanje();
            List <KeyValuePair <int, int> > lista = new List <KeyValuePair <int, int> >();

            foreach (var item in origigi.GetListaOsobaUloga())
            {
                lista.Add(item);
            }

            nova.SetId(id);
            nova.SetNaziv(naziv);
            nova.SetVrsta(vrstaId);
            nova.SetTrajanje(trajanje);
            nova.SetListaOsobaUloga(lista);
            return(nova);
        }
        private static void DodajEmisijeZadaniPocetak(
            TvProgram program, List <VremenskiPlan> listaZadaniPocetakDani)
        {
            TvKucaSingleton            tvKuca  = TvKucaSingleton.GetTvKucaInstance();
            SubjectOsobaUlogaSingleton subject = SubjectOsobaUlogaSingleton.GetInstance();

            foreach (VremenskiPlan plan in listaZadaniPocetakDani)
            {
                foreach (int brojDana in plan.GetListaDanaEmitiranja())
                {
                    Emisija trazena = tvKuca.ListaEmisija.Find
                                          (x => x.GetId() == plan.GetEmisijaId());
                    if (trazena == null)
                    {
                        Console.WriteLine(" - Emisija sa ID: " + plan.GetEmisijaId() +
                                          " ne postoji! -> PRESKAČEM");
                        break;
                    }
                    Emisija emisijaZaDodat = VratiNoviKopiraniObjekt(trazena);
                    emisijaZaDodat.SetVrijemePrikazivanja(plan.GetPocetak());
                    DodajNoveOsobeUlogeEmisije(emisijaZaDodat, plan);
                    if (ProvjeriMogucnostDodavanja
                            (emisijaZaDodat, program.GetTjedan()[brojDana - 1], program))
                    {
                        DodjeliRedniBroj(emisijaZaDodat);
                        program.GetTjedan()[(brojDana - 1)].AddChild(emisijaZaDodat);
                        subject.AddObserver(emisijaZaDodat);
                    }
                    else
                    {
                        Console.WriteLine(" - " + brojDana + ".dan - Emisiju: " + emisijaZaDodat.GetId()
                                          + " vrijeme pocetka: " + emisijaZaDodat.GetVrijemePrikazivanja().TimeOfDay
                                          + ", " + emisijaZaDodat.GetNaziv() + " - trajanje: " +
                                          emisijaZaDodat.GetTrajanje() + " nije bilo moguće dodati u raspored.");
                    }
                }
            }
        }