private async Task HandleTvShowSelection(SearchedTvShow searchedTvShow)
        {
            var tvShow = await GetTvShow(searchedTvShow);

            if (!tvShow.Seasons.Any() && tvShow.HasEnded)
            {
                await _userInterface.DisplayTvShowDetailsAsync(tvShow);

                await _userInterface.WarnShowCannotBeRequestedAsync(tvShow);
            }
            else if (tvShow.AllSeasonsFullyRequested())
            {
                if (tvShow.Seasons.OfType <FutureTvSeasons>().Any())
                {
                    await new FutureSeasonsRequestingWorkflow(_user, _searcher, _requester, _userInterface, _tvShowNotificationWorkflow)
                    .RequestAsync(tvShow, tvShow.Seasons.OfType <FutureTvSeasons>().FirstOrDefault());
                }
                else
                {
                    await _userInterface.DisplayTvShowDetailsAsync(tvShow);

                    await _userInterface.WarnShowHasEndedAsync(tvShow);
                }
            }
            else if (!tvShow.IsMultiSeasons() && tvShow.Seasons.OfType <NormalTvSeason>().Any())
            {
                await new NormalTvSeasonRequestingWorkflow(_user, _searcher, _requester, _userInterface, _tvShowNotificationWorkflow)
                .RequestAsync(tvShow, tvShow.Seasons.OfType <NormalTvSeason>().Single());
            }
            else
            {
                await RequestTvShowSeason(tvShow);
            }
        }
        public async Task HandleTvShowSelectionAsync(int tvDbId)
        {
            var tvShow = await GetTvShowAsync(tvDbId);

            if (!tvShow.Seasons.Any() && tvShow.HasEnded)
            {
                await _userInterface.WarnShowCannotBeRequestedAsync(tvShow);
            }
            else if (tvShow.AllSeasonsFullyRequested())
            {
                if (tvShow.Seasons.OfType <FutureTvSeasons>().Any())
                {
                    await HandleSeasonSelectionAsync(tvShow, tvShow.Seasons.OfType <FutureTvSeasons>().Single());
                }
                else
                {
                    if (tvShow.HasEnded)
                    {
                        await _userInterface.WarnShowHasEndedAsync(tvShow);
                    }
                    else
                    {
                        await _userInterface.WarnAlreadySeasonAlreadyRequestedAsync(tvShow, new FutureTvSeasons());
                    }
                }
            }
            else if (!tvShow.IsMultiSeasons() && tvShow.Seasons.OfType <NormalTvSeason>().Any())
            {
                await HandleSeasonSelectionAsync(tvShow, tvShow.Seasons.OfType <NormalTvSeason>().Single());
            }
            else
            {
                var seasons = GetAvailableTvShowSeasonsBasedOnRestrictions(tvShow);

                if (seasons.Length == 1)
                {
                    await HandleSeasonSelectionAsync(tvShow, seasons.Single());
                }
                else
                {
                    await _userInterface.DisplayMultiSeasonSelectionAsync(new TvShowRequest(_user, _categoryId), tvShow, GetAvailableTvShowSeasonsBasedOnRestrictions(tvShow));
                }
            }
        }