using System;
using System.Linq;
using System.Text;

namespace 电子展板.Base
{
    /// <summary>
    /// 配置类
    /// </summary>
    public class MyConfig : ModelBase
    {
        /// <summary>
        /// 时间
        /// </summary>
        [Comment("时间")]
        public string Time { get; set; }

        /// <summary>
        /// 时间字体大小
        /// </summary>
        [Comment("时间字体大小")]
        public int TimeSize { get; set; }

        /// <summary>
        /// 负责人
        /// </summary>
        [Comment("负责人")]
        public string Charger { get; set; }
        /// <summary>
        /// 负责人字体大小
        /// </summary>
        [Comment("负责人字体大小")]
        public int ChargerSize { get; set; }
        /// <summary>
        /// 风险等级
        /// </summary>
        [Comment("风险等级")]
        public string RiskLevel { get; set; }
        /// <summary>
        /// 风险等级字体大小
        /// </summary>
        [Comment("风险等级字体大小")]
        public int RiskLevelSize { get; set; }

        /// <summary>
        /// 工作内容
        /// </summary>
        [Comment("工作内容")]
        public string Content { get; set; }
        /// <summary>
        /// 工作内容字体大小
        /// </summary>
        [Comment("工作内容字体大小")]
        public int ContentSize { get; set; }

        /// <summary>
        /// 危险点
        /// </summary>
        [Comment("危险点")]
        public string DangerPoint { get; set; }
        /// <summary>
        /// 危险点
        /// </summary>
        [Comment("危险点字体大小")]
        public int DangerPointSize { get; set; }


        /// <summary>
        /// 重点措施
        /// </summary>
        [Comment("重点措施")]
        public string Measures { get; set; }

        [Comment("重点措施字体大小")]
        public int MeasuresSize { get; set; }

        [Comment("党员1图片路径")]
        public string CPCMember1Path { get; set; }
        [Comment("党员1姓名")]
        public string CPCMember1Name { get; set; }
        [Comment("党员2图片路径")]
        public string CPCMember2Path { get; set; }
        [Comment("党员2姓名")]
        public string CPCMember2Name { get; set; }
        [Comment("党员3图片路径")]
        public string CPCMember3Path { get; set; }
        [Comment("党员3姓名")]
        public string CPCMember3Name { get; set; }
        [Comment("党员4图片路径")]
        public string CPCMember4Path { get; set; }
        [Comment("党员4姓名")]
        public string CPCMember4Name { get; set; }

        [Comment("党员字体大小")]
        public int CPCMemberSize { get; set;}
        /// <summary>
        /// 转换成JSON字符串
        /// </summary>
        /// <returns></returns>
        public string ToJson()
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("{");
            //得到所有的Property
            var properties = GetType().GetProperties();
            for (int i = 0; i < properties.Length; i++)
            {
                var property = properties[i];
                string endChar = ",";
                if (i == properties.Length - 1)
                {
                    endChar = "";
                }
                var comment = property.GetCustomAttributes(typeof(CommentAttribute), false).FirstOrDefault() as CommentAttribute;
                string commentText = "";
                if (comment != null)
                {
                    commentText = $"    /* {comment.Comment} */";
                }
                string propertyName = property.Name;
                var value = property.GetValue(this, null);
                if (value != null)
                {
                    var valueType = value.GetType();
                    if (valueType == typeof(string))
                    {
                        sb.AppendLine($"    \"{propertyName}\":\"{value}\"{endChar}{commentText}");
                    }
                    else
                    {
                        sb.AppendLine($"    \"{propertyName}\":{value}{endChar}{commentText}");
                    }
                }
            }
            sb.AppendLine("}");
            return sb.ToString();
        }
    }


    public class CommentAttribute : Attribute
    {
        public string Comment { get; set; }
        public CommentAttribute(string comment)
        {
            Comment = comment;
        }
    }

}
