package com.woodencloset.signalbot.responders;

import com.woodencloset.signalbot.SignalBot;

import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class HebrewDiceRollResponder implements SignalBot.Responder {
    private static final Pattern DICE_ROLL_PATTERN = Pattern.compile("גלגל\\s+(?<dice>\\d+)ק(?<sides>\\d+)(?<flag>[מ])?");
    private static final Random RANDOM = new Random();
    private static final int MAX_DICE = 20;
    private static final int MAX_SIDES = 100;

    @Override
    public String getResponse(String messageText) {
        Matcher matcher = DICE_ROLL_PATTERN.matcher(messageText);
        if (matcher.matches()) {
            int numDice = Math.min(Integer.parseInt(matcher.group("dice")), MAX_DICE);
            int numSides = Math.min(Integer.parseInt(matcher.group("sides")), MAX_SIDES);
            String flag = matcher.group("flag");
            boolean sorted = flag != null && flag.equalsIgnoreCase("מ");
            IntStream randoms = RANDOM.ints(numDice, 1, numSides + 1);
            if (sorted) {
                randoms = randoms.sorted();
            }
            String randomString = randoms.mapToObj(String::valueOf).collect(Collectors.joining(", ", "[", "]"));
            return String.format("%dק%d: %s", numDice, numSides, randomString);
        }
        return null;
    }
}