using Apewer.Internals;
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;

namespace Apewer
{

    /// <summary></summary>
    [Serializable]
    [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
    public class CaptionAttribute : Attribute
    {

        private string _title, _description, _remark;

        /// <summary></summary>
        public CaptionAttribute(string title = null, string description = null, string remark = null)
        {
            Title = title;
            Description = description;
            Remark = remark;
        }

        /// <summary></summary>
        public string Title
        {
            get { return _title; }
            set { _title = value ?? Constant.EmptyString; }
        }

        /// <summary></summary>
        public string Description
        {
            get { return _description; }
            set { _description = value ?? Constant.EmptyString; }
        }

        /// <summary></summary>
        public string Remark
        {
            get { return _remark; }
            set { _remark = value ?? Constant.EmptyString; }
        }

        /// <summary></summary>
        public static string GetTitle(MethodInfo method, bool inherit = true)
        {
            if (method == null) return null;

            var attributes = method.GetCustomAttributes(typeof(CaptionAttribute), inherit);
            if (attributes.Length > 0)
            {
                var attribute = attributes[0] as CaptionAttribute;
                return attribute.Title;
            }

            return method.Name;
        }

    }

}