public async Task <SearchResult> FindByNameAsync(string prefix, TimeSpan timeout, string year = null, FilmType type = FilmType.movie, CancellationToken cancellation = default)
        {
            var result = new SearchResult {
                Films = Array.Empty <FilmData>()
            };

            var page = 1;

            do
            {
                var queryString = HttpUtility.ParseQueryString(string.Empty);
                queryString.Add("apikey", apikey);
                queryString.Add("s", prefix);
                queryString.Add("year", year);
                queryString.Add("type", type.ToString());
                queryString.Add("page", page++.ToString());

                var request = new HttpRequestMessage(HttpMethod.Get, "?" + queryString);
                request.Headers.Add("Timeout", timeout.Ticks.ToString());

                var response = await httpClient.SendAsync(request, cancellation).ConfigureAwait(false);

                response.EnsureSuccessStatusCode();

                var content = await response.Content.ReadAsAsync <SearchResult>(cancellation).ConfigureAwait(false);

                content.Films = content.Films?.Union(result.Films).ToArray();
                result        = content;
            } while (result.Films.Length < result.TotalResults);

            return(result);
        }
        public async Task <SearchResult> FindFilmsAsync(string name, TimeSpan timeout, string year = null, FilmType type = FilmType.movie, CancellationToken cancellation = default)
        {
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            queryString.Add("name", name);
            queryString.Add("year", year);
            queryString.Add("type", type.ToString());

            var request = new HttpRequestMessage(HttpMethod.Get, $"/Films/FindByPrefix?{queryString}");

            request.Headers.Add("Timeout", timeout.Ticks.ToString());

            var response = await httpClient.SendAsync(request, cancellation).ConfigureAwait(false);

            response.EnsureSuccessStatusCode();

            return(await response.Content.ReadAsAsync <SearchResult>(cancellation).ConfigureAwait(false));
        }
        public async Task <FilmFullData> GetByNameAsync(string name, TimeSpan timeout, string year = null, FilmType type = FilmType.movie, CancellationToken cancellation = default)
        {
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            queryString.Add("apikey", apikey);
            queryString.Add("t", name);
            queryString.Add("y", year);
            queryString.Add("type", type.ToString());

            var request = new HttpRequestMessage(HttpMethod.Get, "?" + queryString);

            request.Headers.Add("Timeout", timeout.Ticks.ToString());

            var response = await httpClient.SendAsync(request, cancellation).ConfigureAwait(false);

            response.EnsureSuccessStatusCode();

            return(await response.Content.ReadAsAsync <FilmFullData>(cancellation).ConfigureAwait(false));
        }