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

namespace YachtDice.Categories
{
    /// <summary>
    /// Категория Стрит: последовательность заданной длины.
    /// При совпадении возвращает фиксированное число очков.
    /// Малый стрит: runLength=4, fixedScore=30. Большой стрит: runLength=5, fixedScore=40.
    /// </summary>
    [CreateAssetMenu(fileName = "StraightCategory", menuName = "YachtDice/Categories/Straight")]
    public class StraightCategory : CategoryDefinition
    {
        [Header("Scoring")]
        [Tooltip("Требуемая длина последовательности")]
        [SerializeField, Range(3, 6)] private int runLength = 4;

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

        public override int Calculate(IReadOnlyList<IDie> dice)
        {
            int[] values = DiceCheckUtility.ExtractValues(dice);
            return DiceCheckUtility.HasStraightRun(values, runLength) ? fixedScore : 0;
        }

#if UNITY_EDITOR
        public static StraightCategory CreateForTest(string id, string displayName, int run, int score)
        {
            var so = CreateInstance<StraightCategory>();
            so.SetTestData(id, displayName);
            so.runLength = run;
            so.fixedScore = score;
            return so;
        }
#endif
    }
}
