public async Task <IActionResult> GetPreviousProfilesForSpecificationForProviderForFundingLine(
            string specificationId,
            string providerId,
            string fundingStreamId,
            string fundingLineCode)
        {
            Guard.ArgumentNotNull(fundingStreamId, nameof(fundingStreamId));
            Guard.ArgumentNotNull(specificationId, nameof(specificationId));
            Guard.ArgumentNotNull(providerId, nameof(providerId));
            Guard.ArgumentNotNull(fundingLineCode, nameof(fundingLineCode));

            ApiResponse <IEnumerable <FundingLineChange> > fundingLineApiResponse = await _publishingApiClient
                                                                                    .GetPreviousProfilesForSpecificationForProviderForFundingLine(
                specificationId,
                providerId,
                fundingStreamId,
                fundingLineCode);

            IActionResult fundingLineErrorResult =
                fundingLineApiResponse.IsSuccessOrReturnFailureResult(nameof(PublishedProviderVersion));

            if (fundingLineErrorResult != null)
            {
                return(fundingLineErrorResult);
            }

            ApiResponse <ProviderVersionSearchResult> providerResponse =
                await _providersApiClient.GetCurrentProviderForFundingStream(fundingStreamId, providerId);

            IActionResult providerErrorResult =
                providerResponse.IsSuccessOrReturnFailureResult(nameof(ProviderVersionSearchResult));

            if (providerErrorResult != null)
            {
                return(providerErrorResult);
            }

            ApiResponse <SpecificationSummary> specificationResponse = await _specificationsApiClient.GetSpecificationSummaryById(specificationId);

            IActionResult specificationErrorResult =
                specificationResponse.IsSuccessOrReturnFailureResult(nameof(SpecificationSummary));

            if (specificationErrorResult != null)
            {
                return(specificationErrorResult);
            }

            SpecificationSummary specification = specificationResponse.Content;

            return(Ok(new FundingLineChangesViewModel
            {
                ProviderName = providerResponse.Content.Name,
                SpecificationName = specification.Name,
                FundingPeriodName = specification.FundingPeriod.Name,
                FundingLineChanges = fundingLineApiResponse.Content
            }));
        }