public void Initialize()
 {
     _duration = new TalkDuration(TimeUnit.Min, 60);
     _scheduler=new SimpleScheduler();
     SetDaysSchedule();
     _testConference = new Conference(_scheduler,_days);
     _testConference.ResultFormatter = new TextFileFormatter();
 }
        public void NotRegisterTalksIfItCannotBeScheduled()
        {
            _testConference = new Conference(_scheduler, new List<Day>(){ new Day( new List<Track>(){
                                                                            Helper.GetNewTrack()
                                                                          })});

            _testConference.TalksLoader = new FileTalksLoader(Helper.GetTalksListOne());
            _testConference.RegisterTalks();
        }
        /// <summary>
        /// Prints the schedule of the Talks in the conference
        /// </summary>
        /// <param name="conference"></param>
        private static void PrintTalkSchedule(Conference conference)
        {
            foreach (var track in conference.Tracks)
            {
                Console.WriteLine();
                Console.WriteLine("TRACK: " + track.Id);
                while (track.MorningSession.Talks.Count != 0)
                {
                    var talk = track.MorningSession.Talks.Dequeue();
                    Console.WriteLine(
                        string.Format(
                            "{0}:{1}", track.MorningSession.StartTime / 60, track.MorningSession.StartTime % 60)
                        + " AM " + talk.Name);
                    track.MorningSession.StartTime = track.MorningSession.StartTime + talk.Duration;
                }

                Console.WriteLine();
                Console.WriteLine("12:00 PM LUNCH");
                Console.WriteLine();

                while (track.AfterNoonSession.Talks.Count != 0)
                {
                    var talk = track.AfterNoonSession.Talks.Dequeue();
                    Console.WriteLine(
                        string.Format(
                            "{0}:{1}", track.AfterNoonSession.StartTime / 60, track.AfterNoonSession.StartTime % 60)
                        + " PM " + talk.Name);
                    track.AfterNoonSession.StartTime = track.AfterNoonSession.StartTime + talk.Duration;
                }
                if (track.Filled != true)
                {
                    Console.WriteLine(
                        string.Format(
                            "{0}:{1}", track.AfterNoonSession.StartTime / 60, track.AfterNoonSession.StartTime % 60)
                        + " PM " + "Networking Event");
                    track.Filled = true;
                }
            }
        }
 public void CleanUp()
 {
     _testConference = null;
 }
        public static Conference ManageConference(Queue<Talk> talks)
        {
            // Initialize Conference Data Structure
            var tracks = InitializeEmptyTracks();
            var conference = new Conference(tracks);

            //Loop through all Talks and assign them to empty Talk slots in Sessions

            while (talks.Count != 0)
            {
                var currentTalk = talks.Dequeue();
                foreach (var track in conference.Tracks)
                {
                    // Morning Session
                    if (!track.MorningSession.Filled)
                    {
                        if ((currentTalk.Duration) <= track.MorningSession.EndTime - track.MorningSession.CurrentTime)
                        {
                            track.MorningSession.Talks.Enqueue(currentTalk);
                            track.MorningSession.CurrentTime = track.MorningSession.CurrentTime + currentTalk.Duration;
                            break;
                        }
                        track.MorningSession.Filled = true;
                    }

                    // AfterNoon Session
                    if (!track.AfterNoonSession.Filled)
                    {
                        if (currentTalk.Duration <= track.AfterNoonSession.EndTime - track.AfterNoonSession.CurrentTime)
                        {
                            track.AfterNoonSession.Talks.Enqueue(currentTalk);
                            track.AfterNoonSession.CurrentTime = track.AfterNoonSession.CurrentTime
                                                                 + currentTalk.Duration;
                            break;
                        }
                        track.AfterNoonSession.Filled = true;
                    }

                    var allTracksFilled = true;
                    foreach (var track1 in tracks)
                    {
                        if (!track1.Filled)
                        {
                            allTracksFilled = false;
                        }
                    }

                    if (talks.Count() != 0 && allTracksFilled)
                    {
                        foreach (var track1 in tracks)
                        {
                            track1.Filled = false;
                        }
                    }
                }
            }

            // Marks Track as filled and adds Networking event at the end of each Track
            foreach (var track in conference.Tracks)
            {
                if (track.AfterNoonSession.Filled)
                {
                    if (track.Filled != true)
                    {
                        track.AfterNoonSession.Talks.Enqueue(new Talk() { Name = "Networking Event" });
                        track.Filled = true;
                    }
                }
            }

            PrintTalkSchedule(conference);
            return conference;
        }