using System.Collections.Generic;
using UnityEngine;
using YachtDice.Dice;

namespace YachtDice.Categories
{
    /// <summary>
    /// Категория N-одинаковых: проверяет наличие N дайсов с одинаковым значением.
    /// При успехе возвращает сумму всех дайсов или фиксированное число очков.
    /// Используется для Тройки (3, сумма), Каре (4, сумма), Яхты (5, fixed=50).
    /// </summary>
    [CreateAssetMenu(fileName = "NOfAKindCategory", menuName = "YachtDice/Categories/N Of A Kind")]
    public class NOfAKindCategory : CategoryDefinition
    {
        [Header("Scoring")]
        [Tooltip("Сколько одинаковых дайсов требуется")]
        [SerializeField, Range(2, 6)] private int requiredCount = 3;

        [Tooltip("Использовать фиксированное число очков вместо суммы")]
        [SerializeField] private bool useFixedScore;

        [Tooltip("Фиксированное число очков (если useFixedScore = true)")]
        [SerializeField] private int fixedScore;

        public override int Calculate(IReadOnlyList<IDie> dice)
        {
            int[] values = DiceCheckUtility.ExtractValues(dice);

            if (!DiceCheckUtility.NOfAKind(values, requiredCount))
                return 0;

            return useFixedScore ? fixedScore : DiceCheckUtility.Sum(values);
        }

#if UNITY_EDITOR
        public static NOfAKindCategory CreateForTest(string id, string displayName, int count, bool fixedScoreMode = false, int score = 0)
        {
            var so = CreateInstance<NOfAKindCategory>();
            so.SetTestData(id, displayName);
            so.requiredCount = count;
            so.useFixedScore = fixedScoreMode;
            so.fixedScore = score;
            return so;
        }
#endif
    }
}
