public ActionResult Index(int?id = null)
        {
            var anyEventSelected = id.HasValue;

            if (id.HasValue)
            {
                if (!IsDirectorAuthorizedOnEvent(id.Value))
                {
                    return(View("Unauthorized"));
                }
            }

            var pastEvents = EventServices.GetPastEventsByDirector(
                CurrentCedUser.CurrentUser.Email,
                WebConfigHelper.MinFinancialYear,
                Constants.DefaultValidEditionStatusesForCed,
                Constants.ValidEventTypesForCed,
                3,
                20)
                             .OrderBy(x => x.MasterName).ToList();

            foreach (var @event in pastEvents)
            {
                @event.DisplayDate = DateHelper.GetDisplayDate(@event.StartDate, @event.EndDate);
            }

            if (!pastEvents.Any())
            {
                var allEvents = EventServices.GetEventLightsByDirector(
                    CurrentCedUser.CurrentUser.Email,
                    Constants.ValidEventTypesForCed,
                    WebConfigHelper.MinFinancialYear)
                                .ToList();

                if (allEvents.Any())
                {
                    id = allEvents.First().EventId;
                }
                else
                {
                    return(View("Unauthorized"));
                }
            }

            if (id == null)
            {
                id = pastEvents.First().EventId;
            }

            var selectedEvent = EventServices.GetEventById(id.Value);

            if (selectedEvent == null)
            {
                return(View("NotFound"));
            }

            var lastEdition = EditionServices.GetLastFinishedEdition(selectedEvent.EventId);

            if (lastEdition == null)
            {
                var nextEdition = EditionServices.GetClosestEdition(selectedEvent.EventId, Constants.ValidEventTypesForCed);
                if (nextEdition == null)
                {
                    return(View("Error", new ErrorModel {
                        Message = $"Next edition not found for {selectedEvent.EventId} | {selectedEvent.MasterName}!"
                    }));
                }

                return(View(new IndexModel
                {
                    EventId = selectedEvent.EventId,
                    EventName = selectedEvent.MasterName,
                    EventType = selectedEvent.EventTypeCode.ToEnumFromDescription <EventType>(),
                    EventDisplayDate = selectedEvent.DisplayDate,
                    SelectedEditionId = nextEdition.EditionId,
                    SelectedEditionName = nextEdition.EditionName,
                    NextEditionStartDate = nextEdition.StartDate,
                    EventEditionList = pastEvents
                }));
            }

            selectedEvent.DisplayDate = DateHelper.GetDisplayDate(lastEdition.StartDate, lastEdition.EndDate);

            var lastEditionTranslation = EditionTranslationServices.GetEditionTranslationLight(lastEdition.EditionId, LanguageHelper.GetBaseLanguageCultureName());

            var internationalExhibitorPavilionCounts = StatisticServices.GetInternationalExhibitorPavilionCounts(selectedEvent.EventId, 3);
            var exhibitorCountryCounts = StatisticServices.GetExhibitorCountryCounts(selectedEvent.EventId, 3);
            var visitorCountryCounts   = StatisticServices.GetVisitorCountryCounts(selectedEvent.EventId, 3);

            var localExhibitorRetentionRates         = StatisticServices.GetExhibitorRetentionRatesLocal(selectedEvent.EventId, 3);
            var internationalExhibitorRetentionRates = StatisticServices.GetExhibitorRetentionRatesInternational(selectedEvent.EventId, 3);

            var editionCountriesExhibitor = EditionCountryServices.GetEditionCountriesByEdition(lastEdition.EditionId, EditionCountryRelationType.Exhibitor);
            var editionCountriesVisitor   = EditionCountryServices.GetEditionCountriesByEdition(lastEdition.EditionId, EditionCountryRelationType.Visitor);

            var exhibitorCountryNames =
                Countries.Where(c => editionCountriesExhibitor.Any(ec => ec.CountryCode == c.CountryCode))
                .Select(c => c.CountryName)
                .ToList();

            var visitorCountryNames =
                Countries.Where(c => editionCountriesVisitor.Any(ec => ec.CountryCode == c.CountryCode))
                .Select(c => c.CountryName)
                .ToList();

            var delegateCountryNames = new List <string>();
            var lastEditionEvent     = lastEdition.Event ?? EventServices.GetEventById(lastEdition.EventId);

            if (Constants.ConferenceEventTypes.Contains(lastEditionEvent.EventTypeCode))
            {
                var editionCountriesDelegate = EditionCountryServices.GetEditionCountriesByEdition(lastEdition.EditionId, EditionCountryRelationType.Delegate);
                delegateCountryNames = editionCountriesDelegate.Any()
                    ? Countries.Where(c => editionCountriesExhibitor.Any(ec => ec.CountryCode == c.CountryCode))
                                       .Select(c => c.CountryName)
                                       .ToList()
                    : new List <string>();
            }

            var model = new IndexModel
            {
                EventId             = selectedEvent.EventId,
                EventName           = selectedEvent.MasterName,
                EventType           = selectedEvent.EventTypeCode.ToEnumFromDescription <EventType>(),
                EventDisplayDate    = selectedEvent.DisplayDate,
                SelectedEditionId   = lastEdition.EditionId,
                SelectedEditionName = lastEdition.EditionName,
                EventEditionList    = pastEvents,
                EditionStatModel    = new EditionStatModel
                {
                    ExhibitorCountries                   = exhibitorCountryNames,
                    VisitorCountries                     = visitorCountryNames,
                    DelegateCountries                    = delegateCountryNames,
                    LocalExhibitorRetentionRates         = localExhibitorRetentionRates,
                    InternationalExhibitorRetentionRates = internationalExhibitorRetentionRates,
                    NumberOfInternationalPavilions       = internationalExhibitorPavilionCounts,
                    NumberOfExhibitorCountries           = exhibitorCountryCounts,
                    NumberOfVisitorCountries             = visitorCountryCounts,
                    BookAStandUrl     = lastEditionTranslation.BookStandUrl,
                    VisitorETicketUrl = lastEditionTranslation.OnlineInvitationUrl
                }
            };

            // Additions to LOG object
            if (TempData["Log"] is LogEntity log)
            {
                if (log.EntityId == null || log.EntityId == 0)
                {
                    log.EntityId   = selectedEvent.EventId;
                    log.EntityName = selectedEvent.MasterName;
                    log.EventId    = selectedEvent.EventId;
                    log.EventName  = selectedEvent.MasterName;
                }
                if (anyEventSelected) // If an event selected intentionally.
                {
                    log.AdditionalInfo = "{ 'WebLogoFileName': '" + lastEditionTranslation.WebLogoFileName + "' }";
                }
            }

            return(View(model));
        }