public BidType AskForBid(Contract currentContract, IList <BidType> allowedBids, IList <BidType> previousBids)
        {
            this.Contract = currentContract;
            while (true)
            {
                this.Draw();

                var availableBidsAsString = AvailableBidsAsString(allowedBids);

                ConsoleHelper.WriteOnPosition(availableBidsAsString, 0, Settings.ConsoleHeight - 2);
                ConsoleHelper.WriteOnPosition("It's your turn! Please enter your bid: ", 0, Settings.ConsoleHeight - 3);

                BidType bid;

                var playerContract = Console.ReadLine();
                if (string.IsNullOrWhiteSpace(playerContract))
                {
                    continue;
                }

                playerContract = playerContract.Trim();
                switch (char.ToUpper(playerContract[0]))
                {
                case 'A':
                    bid = BidType.AllTrumps;
                    break;

                case 'N':
                    bid = BidType.NoTrumps;
                    break;

                case 'S':
                    bid = BidType.Spades;
                    break;

                case 'H':
                    bid = BidType.Hearts;
                    break;

                case 'D':
                    bid = BidType.Diamonds;
                    break;

                case 'C':
                    bid = BidType.Clubs;
                    break;

                case 'P':
                    bid = BidType.Pass;
                    break;

                case '2':
                    bid = BidType.Double;
                    break;

                case '4':
                    bid = BidType.ReDouble;
                    break;

                default:
                    continue;
                }

                if (allowedBids.Contains(bid))
                {
                    return(bid);
                }
            }
        }