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

namespace JLGames.RocketDriver.Games.RpgMaterial.Material
{
    public interface IMaterial : IElement
    {
        /// <summary>
        /// Id
        /// </summary>
        int Id { get; }

        /// <summary>
        /// Name
        /// 名称
        /// </summary>
        string Name { get; }

        /// <summary>
        /// Type
        /// 类型
        /// </summary>
        int Type { get; }

        /// <summary>
        /// Minimum number allowed
        /// 允许最小数量
        /// </summary>
        int LimitMin { get; }

        /// <summary>
        /// Maximum number allowed
        /// 允许最大数量
        /// </summary>
        int LimitMax { get; }

        /// <summary>
        /// Original description
        /// 原始描述
        /// </summary>
        string Desc { get; }

        /// <summary>
        /// Check if number is allowed
        /// 检查数量是否允许
        /// </summary>
        /// <param name="num"></param>
        /// <returns>-1: less than the minimum value, 1: greater than the maximum value, 0: allowed<br/></returns>
        /// <returns>-1：小于最小值，1：大于最大值，0：允许<br/></returns>
        int CheckLimit(int num);

        /// <summary>
        /// Get description
        /// 取业务描述数据
        /// </summary>
        /// <returns></returns>
        string GetDesc();
    }

    public interface IMaterial<TCfg> : IMaterial
    {
        /// <summary>
        /// Raw data
        /// 原始数据
        /// </summary>
        TCfg RawData { get; }
    }
}