/// <summary>
        /// Handles movie searches.
        /// </summary>
        /// <param name="stepContext">The step context.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>Task&lt;DialogTurnResult&gt;.</returns>
        private async Task <DialogTurnResult> HandleMovieSearch(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var userProfile = await Accessors.GetAsync(stepContext.Context, () => new UserProfile(), cancellationToken);

            var client = new TMDbClient(Settings.ApiSettings.MovieDatabaseApiKey);
            var result = await client.SearchMovieAsync(userProfile.MovieDownload.Title, cancellationToken : cancellationToken);

            if (result.TotalResults == 0)
            {
                var noResultsActivity = MessageFactory.Text(Resources.MovieDialog_ImdbSearch_NoResults);

                await stepContext.Context.SendActivityAsync(noResultsActivity, cancellationToken);

                return(await stepContext.ReplaceDialogAsync(TitleWaterFall, cancellationToken : cancellationToken));
            }
            else
            {
                var options = result.Results.Select(resultItem =>
                                                    new AttachmentOption
                {
                    ImageUrl = ActivityHelpers.FormatTmdbPosterPath(resultItem.PosterPath),
                    Value    = resultItem.Id.ToString(),
                    Title    = resultItem.Title
                }).ToList();

                userProfile.MovieDownload.SearchOptions = options;

                var activity = ActivityHelpers.GetCardChoicesFromOptions(Resources.MovieDialog_SelectMovie_Message, options, AttachmentLayoutTypes.Carousel, true);
                return(await stepContext.PromptAsync(TextPromptDialog, new PromptOptions
                {
                    Prompt = activity
                }, cancellationToken));
            }
        }
        /// <summary>
        /// Gets the Nnb files.
        /// </summary>
        /// <param name="stepContext">The step context.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>Task&lt;DialogTurnResult&gt;.</returns>
        private async Task <DialogTurnResult> GetNzbs(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var userProfile = await Accessors.GetAsync(stepContext.Context, () => new UserProfile(), cancellationToken);

            var stringResult = stepContext.Result.ToString();
            var tvdbId       = userProfile.MovieDownload.SearchOptions.FirstOrDefault(sr => sr.Title == stringResult).Value;

            var searchId = int.Parse(tvdbId);
            var imdbId   = await GetMovieImdbId(searchId);

            var rawImdbId = imdbId.Replace("tt", string.Empty);
            var result    = await _nzbClient.SearchForMovieAsync(rawImdbId);

            var stringFilter = userProfile.MovieDownload.Quality == MovieQuality.Quality720P ? "720p" : "1080p";
            var movies       = result.Channel.Items.Where(m => m.Title.Contains(stringFilter)).ToList();

            if (movies.Count == 0)
            {
                var noResultsActivity = MessageFactory.Text(Resources.MovieDialog_ImdbSearch_NoResults);

                await stepContext.Context.SendActivityAsync(noResultsActivity, cancellationToken);

                return(await stepContext.ReplaceDialogAsync(TitleWaterFall, cancellationToken : cancellationToken));
            }
            else
            {
                var options = movies.Select(resultItem =>
                                            new AttachmentOption
                {
                    Value = resultItem.Link,
                    Title = resultItem.Title
                }).ToList();

                userProfile.MovieDownload.NzbOptions = options;

                var activity = ActivityHelpers.GetCardChoicesFromOptions(Resources.MovieDialog_SelectMovie_Message, options, AttachmentLayoutTypes.List, false);
                return(await stepContext.PromptAsync(TextPromptDialog, new PromptOptions { Prompt = activity }, cancellationToken));
            }
        }