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)); } } }