﻿using JLGames.RocketDriver.Games.RpgMaterial.Common;

namespace JLGames.RocketDriver.Games.RpgMaterial.Material
{
    public abstract class MaterialValidDuration<TCfg> : IMaterialValid<TCfg>
    {
        protected TCfg m_RawData;
        protected MetaData m_Data;
        protected MetaValidDuration m_ValidData;

        public TCfg RawData => m_RawData;
        public string EKey => $"{m_Data.Id}";
        public int Id => m_Data.Id;
        public string Name => m_Data.Name;
        public int Type => m_Data.Type;
        public int LimitMin => m_Data.LimitMin;
        public int LimitMax => m_Data.LimitMax;
        public string Desc => m_Data.Desc;

        public bool ValidEnabled => m_ValidData.ValidEnabled;
        public MaterialValidType ValidType => MaterialValidType.Duration;

        public override string ToString()
        {
            return $"MaterialOper[Data={m_Data}, Worth={m_ValidData}]";
        }

        public int CheckLimit(int num)
        {
            return m_Data.CheckLimit(num);
        }

        public string GetDesc()
        {
            return m_Data.Desc;
        }

        public bool CheckValid(long ticks)
        {
            return !m_ValidData.ValidEnabled || m_ValidData.CheckInValid(ticks);
        }
    }
}