public IProviderSearchCriteria GetProviderSearchCriteria(
            ProviderSearchRequestModel providerSearchRequestModel)
        {
            Throw.IfNull(providerSearchRequestModel, nameof(providerSearchRequestModel));
            var criteria = new ProviderSearchCriteria(providerSearchRequestModel.SearchTerm);

            return(criteria);
        }
        public async Task <IActionResult> Index([FromQuery] ProviderSearchRequestModel requestModel)
        {
            _logger.LogMethodEnter();
            _logger.LogInformationObject("RequestModel", requestModel);
            //Set the UKPRN here in session
            _session.SetInt32("UKPRN", Convert.ToInt32(requestModel.SearchTerm));

            ProviderSearchResultModel model;

            if (requestModel == null)
            {
                model = new ProviderSearchResultModel();
            }
            else
            {
                var criteria = _providerSearchHelper.GetProviderSearchCriteria(requestModel);

                var result = await _providerService.GetProviderByPRNAsync(criteria);

                if (result.IsSuccess && result.HasValue)
                {
                    model = new ProviderSearchResultModel(
                        requestModel.SearchTerm,
                        result.Value.Value);
                }
                else
                {
                    model = new ProviderSearchResultModel(result.Error);
                }
                model.ServiceWasCalled = true;

                foreach (var provider in model.Items)
                {
                    if (model.Items.FirstOrDefault() != null)
                    {
                        var    providerContactTypeL = provider.ProviderContact.Where(s => s.ContactType.Equals("L", StringComparison.InvariantCultureIgnoreCase));
                        string AddressLine1         = string.Empty;
                        if (!(string.IsNullOrEmpty(providerContactTypeL.FirstOrDefault()?.ContactAddress.PAON.Description) &&
                              string.IsNullOrEmpty(providerContactTypeL.FirstOrDefault()?.ContactAddress.StreetDescription)))
                        {
                            AddressLine1 = providerContactTypeL.FirstOrDefault()?.ContactAddress.PAON.Description
                                           + " " + providerContactTypeL.FirstOrDefault()?.ContactAddress.StreetDescription + ", ";
                        }
                        string AddressLine2 = string.Empty;
                        if (providerContactTypeL.FirstOrDefault()?.ContactAddress.Locality != null)
                        {
                            AddressLine2 = providerContactTypeL.FirstOrDefault()?.ContactAddress.Locality.ToString() + ", ";
                        }

                        string AddressLine3 = string.Empty;
                        if (!string.IsNullOrEmpty(providerContactTypeL.FirstOrDefault()?.ContactAddress.Items[0]))
                        {
                            AddressLine3 = providerContactTypeL.FirstOrDefault()?.ContactAddress.Items[0] + ", ";
                        }

                        string PostCode = string.Empty;
                        if (!string.IsNullOrEmpty(providerContactTypeL.FirstOrDefault()?.ContactAddress.PostCode))
                        {
                            PostCode = providerContactTypeL.FirstOrDefault()?.ContactAddress.PostCode;
                        }

                        model.AddressTypeL = string.Concat(AddressLine1, AddressLine2, AddressLine3, PostCode);

                        model.TelephoneTypeL = providerContactTypeL.FirstOrDefault()?.ContactTelephone1;
                        model.WebTypeL       = providerContactTypeL.FirstOrDefault()?.ContactWebsiteAddress;
                        model.EmailTypeL     = providerContactTypeL.FirstOrDefault()?.ContactEmail;
                    }
                }
            }
            _logger.LogInformationObject("Model", model);
            _logger.LogMethodExit();
            return(ViewComponent(nameof(ViewComponents.ProviderSearchResult.ProviderSearchResult), model));
        }