private void MirrorPlexSeasons(PlexMediaItemRow plexItem, TvRequestRow request, bool createExtraSeason, bool createExtraEpisode)
        {
            foreach (var season in plexItem.PlexSeasons)
            {
                var requestSeason = new TvRequestSeasonRow
                {
                    SeasonIndex       = season.Season,
                    TvRequestEpisodes = new List <TvRequestEpisodeRow>()
                };

                foreach (var episode in season.PlexEpisodes)
                {
                    var requestEpisode = new TvRequestEpisodeRow
                    {
                        EpisodeIndex = episode.Episode
                    };

                    requestSeason.TvRequestEpisodes.Add(requestEpisode);
                }

                request.TvRequestSeasons.Add(requestSeason);
            }

            if (createExtraSeason)
            {
                var season = new TvRequestSeasonRowBuilder().Build();
                request.TvRequestSeasons.Add(season);
            }

            if (createExtraEpisode)
            {
                var episode = new TvRequestEpisodeRowBuilder().Build();
                request.TvRequestSeasons.ElementAt(0).TvRequestEpisodes.Add(episode);
            }
        }
        private static void SetEpisodeDetails(TvRequestSeasonRow rootSeason, ICollection <TvRequestEpisodeRow> tvRequestEpisodes, TvSeasonDetails seasonDetails)
        {
            foreach (var episodeToRequest in tvRequestEpisodes)
            {
                var rootEpisode   = rootSeason.TvRequestEpisodes.FirstOrDefault(x => x.EpisodeIndex == episodeToRequest.EpisodeIndex);
                var episodeDetail = seasonDetails.Episodes.FirstOrDefault(x => x.Episode_Number == episodeToRequest.EpisodeIndex);

                if (episodeDetail == null || rootEpisode != null)
                {
                    continue;
                }

                rootEpisode = new TvRequestEpisodeRow
                {
                    AirDateUtc    = DateTime.Parse(episodeDetail.Air_Date),
                    Title         = episodeDetail.Name,
                    ImagePath     = episodeDetail.Still_Path,
                    RequestStatus = RequestStatuses.PendingApproval
                };
                rootSeason.TvRequestEpisodes.Add(rootEpisode);
            }
        }
        private async Task AddNewRootLevelRequests(TvRequestRow existingRequest, List <TvRequestSeasonRow> seasonsToRequest)
        {
            foreach (var seasonToRequest in seasonsToRequest)
            {
                var seasonDetails = await _theMovieDbService.GetTvSeasonDetails(existingRequest.TheMovieDbId, seasonToRequest.SeasonIndex);

                var rootSeason = existingRequest.TvRequestSeasons.FirstOrDefault(x => x.SeasonIndex == seasonToRequest.SeasonIndex);
                if (seasonDetails != null && rootSeason == null)
                {
                    rootSeason = new TvRequestSeasonRow
                    {
                        AirDateUtc    = DateTime.Parse(seasonDetails.Air_Date),
                        Title         = seasonDetails.Name,
                        ImagePath     = seasonDetails.Poster_Path,
                        RequestStatus = RequestStatuses.PendingApproval
                    };
                }

                SetEpisodeDetails(rootSeason, seasonToRequest.TvRequestEpisodes, seasonDetails);

                existingRequest.TvRequestSeasons.Add(rootSeason);
            }
        }