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

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

        [Header("Section")]
        [SerializeField] private bool isUpperSection;

        public string Id => id;
        public string DisplayName => displayName;
        public string Description => description;
        public Sprite Icon => icon;
        public bool IsUpperSection => isUpperSection;

        /// <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
    }
}
