using System;
using Aitex.Core.RT.Event;

namespace Aitex.Core.UI.View.Common
{
    /// <summary>
    /// 应用于UI端显示的报警信息对象。
    /// </summary>
    public class AlarmItem
    {
        #region Properties

        /// <summary>
        /// 设置或返回报警发生的时间。
        /// </summary>
        public string OccuringTime { get; set; }

        /// <summary>
        /// 设置或返回报警描述。
        /// </summary>
        public string Description { get; set; }

        /// <summary>
        /// 返回报警类型文本。
        /// <remarks>
        /// 可用的报警类型请参考<see cref="EventType"/>枚举。
        /// </remarks>
        /// </summary>
        public string LevelString =>
            Level == EventLevel.Alarm ? "Alarm" : (Level == EventLevel.Information ? "Info" : "Warning");

        /// <summary>
        /// 设置或返回报警等级。
        /// </summary>
        public EventLevel Level { get; set; }

        /// <summary>
        /// 设置或返回报警编号。
        /// </summary>
        public int EventId { get; set; }

        /// <summary>
        /// 设置或返回报警名称。
        /// </summary>
        public string EventEnum { get; set; }

        /// <summary>
        /// 设置或返回报警的详细解释。
        /// </summary>
        public string Explaination { get; set; }

        /// <summary>
        /// 设置或返回报警的处理方法描述。
        /// </summary>
        public string Solution { get; set; }

        /// <summary>
        /// 设置或返回报警来源。
        /// </summary>
        public string Source { get; set; }

        /// <summary>
        /// 设置或返回当前报警是否已被应答。
        /// </summary>
        public bool IsAcknowledged { get; set; }

        /// <summary>
        /// 设置或返回当前报警被应答的时间。
        /// </summary>
        public DateTime AcknowledgeTime { get; set; }

        #endregion

        #region Methods

        /// <summary>
        /// 判断当前报警信息是否和指定的报警信息相同。
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public bool IsEqualTo(AlarmItem item)
        {
            return item.OccuringTime == OccuringTime &&
                   item.Description == Description &&
                   item.Level == Level;
        }

        #endregion

    }
}
