public IProduct SelectProduct(string productName)
        {
            IProduct result = null;

            if (AvailableProducts.Contains(productName))
            {
                int itemPrice = inventoryManager.GetPrice(productName);
                if (itemPrice > currentBalance)
                {
                    HandleInsufficientFunds(itemPrice);
                }
                else
                {
                    result = inventoryManager.Dispense(productName);
                    if (result == null)
                    {
                        HandleSoldOut();
                    }
                    else
                    {
                        HandleValidSelection(result);
                    }
                }
            }
            PromptForCoins();

            return(result);
        }