/// <summary>
        /// Get broadband deals based on input request
        /// </summary>
        /// <param name="broadbandRequest"></param>
        /// <returns></returns>
        public BroadbandResult GetBroadbandDeals(BroadbandRequest broadbandRequest)
        {
            try
            {
                var dealJsonString        = ReadDealsJson();
                var availableProductTypes = dealJsonString.Deals?.SelectMany(x => x.ProductTypes)?.Where(x => x != null)?.Distinct()?.ToList();
                var availableSpeeds       = dealJsonString.Deals?.Select(x => x.Speed.Label)?.Distinct()?.ToList();
                dealJsonString.AvailableProductTypes = availableProductTypes;
                dealJsonString.AvailableSpeedTypes   = availableSpeeds;
                if (broadbandRequest != null && ((broadbandRequest.ProductTypes != null && broadbandRequest.ProductTypes.Any()) || !string.IsNullOrEmpty(broadbandRequest.SpeedLabel)))
                {
                    if (dealJsonString != null && dealJsonString.Deals != null && dealJsonString.Deals.Any())
                    {
                        var deals          = dealJsonString.Deals?.ToList();
                        var broadbandArray = new string[] { "Broadband", "Fibre Broadband" };
                        var selectedProductTypesWithoutBroadband = broadbandRequest.ProductTypes?.Where(p => !string.Equals(p, "Broadband", StringComparison.OrdinalIgnoreCase))?.ToList();
                        var hasBroadband = broadbandRequest.ProductTypes?.Any(x => string.Equals(x, "Broadband", StringComparison.OrdinalIgnoreCase));
                        if (broadbandRequest.ProductTypes != null && broadbandRequest.ProductTypes.Any())
                        {
                            deals = deals.Where(x => x.ProductTypes != null && (x.ProductTypes.Count() == selectedProductTypesWithoutBroadband.Count + 1)).ToList();
                            if (selectedProductTypesWithoutBroadband.Count > 0 && hasBroadband.GetValueOrDefault())
                            {
                                deals = deals.Where(x => selectedProductTypesWithoutBroadband.All(r => x.ProductTypes.Contains(r)) &&
                                                    x.ProductTypes.Any(u => broadbandArray.Contains(u)))?.ToList();
                            }
                            else if (hasBroadband.GetValueOrDefault())
                            {
                                deals = deals.Where(x => x.ProductTypes.Any(u => broadbandArray.Contains(u)))?.ToList();
                            }
                        }
                        if (!string.IsNullOrEmpty(broadbandRequest.SpeedLabel))
                        {
                            deals = deals.Where(x => x.Speed != null && string.Equals(x.Speed.Label, broadbandRequest.SpeedLabel, StringComparison.OrdinalIgnoreCase))?.ToList();
                        }

                        dealJsonString.Deals = deals;
                    }
                }
                dealJsonString.Result = new Result(ResultStatus.Success);
                return(dealJsonString);
            }
            catch (Exception ex)
            {
                LogManager.Error("Unexpected error occured on calling GetBroadbandDeals method in BroadbandService", ex);
                return(new BroadbandResult(new Result(ResultStatus.Error, ex.Message)));
            }
        }
 public BroadbandResult Get([FromBody] BroadbandRequest broadbandRequest)
 {
     return(_broadbandService.GetBroadbandDeals(broadbandRequest));
 }