using Poker.Strategies;
using static System.StringComparison;

namespace Poker;

internal static class IReadWriteExtensions
{
    internal static bool ReadYesNo(this IReadWrite io, string prompt)
    {
        while (true)
        {
            var response = io.ReadString(prompt);
            if (response.Equals("YES", InvariantCultureIgnoreCase)) { return true; }
            if (response.Equals("NO", InvariantCultureIgnoreCase)) { return false; }
            io.WriteLine("Answer Yes or No, please.");
        }
    }

    internal static float ReadNumber(this IReadWrite io) => io.ReadNumber("");

    internal static int ReadNumber(this IReadWrite io, string prompt, int max, string maxPrompt)
    {
        io.Write(prompt);
        while (true)
        {
            var response = io.ReadNumber();
            if (response <= max) { return (int)response; }
            io.WriteLine(maxPrompt);
        }
    }

    internal static Strategy ReadHumanStrategy(this IReadWrite io, bool noCurrentBets)
    {
        while(true)
        {
            io.WriteLine();
            var bet = io.ReadNumber("What is your bet");
            if (bet != (int)bet)
            {
                if (noCurrentBets && bet == .5) { return Strategy.Check; }
                io.WriteLine("No small change, please.");
                continue;
            }
            if (bet == 0) { return Strategy.Fold; }
            return Strategy.Bet(bet);
        }
    }
}