using System;

namespace FishDice.LuckyDice
{
    public sealed class ComboMatcherSpec
    {
        public ComboMatcherSpec(
            string matcherType,
            string comboKey = null,
            string faceKey = null,
            int? requiredCount = null,
            int? minCount = null,
            int? maxCount = null,
            int? diceCount = null,
            int? ofAKindCount = null,
            int? minSum = null,
            int? maxSum = null,
            bool useOrderedKey = false)
        {
            MatcherType = matcherType ?? throw new ArgumentNullException(nameof(matcherType));
            ComboKey = comboKey;
            FaceKey = faceKey;
            RequiredCount = requiredCount;
            MinCount = minCount;
            MaxCount = maxCount;
            DiceCount = diceCount;
            OfAKindCount = ofAKindCount;
            MinSum = minSum;
            MaxSum = maxSum;
            UseOrderedKey = useOrderedKey;
        }

        public string MatcherType { get; }

        public string ComboKey { get; }

        public string FaceKey { get; }

        public int? RequiredCount { get; }

        public int? MinCount { get; }

        public int? MaxCount { get; }

        public int? DiceCount { get; }

        public int? OfAKindCount { get; }

        public int? MinSum { get; }

        public int? MaxSum { get; }

        public bool UseOrderedKey { get; }
    }
}
