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

namespace YachtDice.Categories
{
    /// <summary>
    /// Абстрактное определение категории для скоринга.
    /// Каждая категория знает как вычислить очки по набору дайсов.
    /// </summary>
    public abstract class CategoryDefinition : ScriptableObject
    {
        [field: Header("Identity")]
        [field: SerializeField] public string Id { get; private set; }
        [field: SerializeField] public string DisplayName { get; private set; }
        [field: SerializeField, TextArea] public string Description { get; private set; }
        [field: SerializeField] public Sprite Icon { get; private set; }

        [field: Header("Section")]
        [field: SerializeField] public bool IsUpperSection { get; private set; }

        /// <summary>
        /// Вычисляет очки для данного набора дайсов.
        /// </summary>
        public abstract int Calculate(IReadOnlyList<IDie> dice);

#if UNITY_EDITOR
        public void SetTestData(string testId, string testDisplayName, bool upperSection = false)
        {
            Id = testId;
            DisplayName = testDisplayName;
            IsUpperSection = upperSection;
        }
#endif
    }
}
