using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using Aitex.Core.Util;

namespace Aitex.Core.RT.Event
{
    [DataContract]
    [Serializable]
    public enum EventLevel
    {
        [EnumMember]
        Information = 0,
        [EnumMember]
        InformationNoDelay = 1,
        [EnumMember]
        Warning = 2,
        [EnumMember]
        Alarm
    }

    [DataContract]
    [Serializable]
    public enum EventType
    {
        /// <summary>
        /// 在TopView显示一条记录
        /// </summary>
        [EnumMember]
        EventUI_Notify,

        /// <summary>
        /// 弹出对话框
        /// </summary>
        [EnumMember]
        Dialog_Nofity,

        /// <summary>
        /// 
        /// </summary>
        [EnumMember]
        KickOut_Notify,

        /// <summary>
        /// 
        /// </summary>
        [EnumMember]
        Sound_Notify,

        /// <summary>
        /// 在屏幕左下角弹出一个提醒的悬浮窗口,自动消失
        /// </summary>
        [EnumMember]
        UIMessage_Notify,

        [EnumMember]
        OperationLog,
    }

    [DataContract]
    [Serializable]
    public class EventItem
    {
        [DataMember]
        public int Id { get; set; }
        [DataMember]
        public string EventEnum { get; set; }                    //
        [DataMember]
        public EventType Type { get; set; }
        [DataMember]
        public EventLevel Level { get; set; }
        [DataMember]
        public string Source { get; set; }                  //Which module send out this event
        [DataMember]
        public string Description { get; set; }             //detail text
        [DataMember]
        public DateTime OccuringTime { get; set; }          //
        [DataMember]
        public bool IsAcknowledged { get; set; }
        [DataMember]
        public string Explaination { get; set; }
        [DataMember]
        public string Solution { get; set; }

        [DataMember]
        public string GlobalDescription_en
        {
            get;
            set;
        }

        [DataMember]
        public string GlobalDescription_zh
        {
            get;
            set;
        }

        [DataMember]
        public SerializableDictionary<string, string> dvid
        {
            get;
            set;
        } 
        public EventItem Clone()
        {
            EventItem result = new EventItem();
            result.Description = Description;
            result.EventEnum = EventEnum;
            result.Explaination = Explaination;
            result.Id = Id;
            result.IsAcknowledged = IsAcknowledged;
            result.Level = Level;
            result.OccuringTime = OccuringTime;
            result.Solution = Solution;
            result.Source = Source;
            result.Type = Type;

            result.GlobalDescription_en = GlobalDescription_en;
            result.GlobalDescription_zh = GlobalDescription_zh;

            return result;
        }

        public EventItem()
        {

        }
        public EventItem (string name )
            : this("System", name, "", EventLevel.Information, EventType.EventUI_Notify)
        {
        }

        public EventItem(string name, string description)
            : this("System", name, description, EventLevel.Information, EventType.EventUI_Notify)
        {
        }

        public EventItem(string source, string name, string description)
        :this(source,name,description, EventLevel.Information, EventType.EventUI_Notify)
        {
        }

        public EventItem(string name, EventType type, EventLevel level)
            : this("System", name, "", level, type)
        {
        }
        
        public EventItem(string source, string name, string description, EventLevel level, EventType type)
        {
            EventEnum = name;
            Type = type;
            Level = level;
            Source = source;
            Description = description;
        }
    }
}