using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using Aitex.Core.Util;
using Aitex.Core.RT.Log;
namespace Aitex.Core.RT.Event
{
    [DataContract]
    [Serializable]
    public enum EventLevel
    {
        [EnumMember]
        Information = 0,
        [EnumMember]
        InformationNoDelay = 1,
        [EnumMember]
        Warning,
        [EnumMember]
        Alarm
    }
    [DataContract]
    [Serializable]
    public enum EventType
    {
        /// 
        /// 在TopView显示一条记录
        /// 
        [EnumMember]
        EventUI_Notify,
        /// 
        /// 弹出对话框
        /// 
        [EnumMember]
        Dialog_Nofity,
        /// 
        /// 
        /// 
        [EnumMember]
        KickOut_Notify,
        /// 
        /// 
        /// 
        [EnumMember]
        Sound_Notify,
        /// 
        /// 在屏幕左下角弹出一个提醒的悬浮窗口,自动消失
        /// 
        [EnumMember]
        UIMessage_Notify,
        [EnumMember]
        OperationLog,
        [EnumMember]
        HostNotification,
    }
    [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 DVID
        {
            get;
            set;
        }
        
        public SerializableDictionary ObjDVID
        {
            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;
            result.DVID = DVID;
            result.ObjDVID = ObjDVID;
            return result;
        }
        public EventItem Clone(SerializableDictionary objDvid)
        {
            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;
            result.DVID = DVID;
            result.ObjDVID = objDvid;
            return result;
        }
        public EventItem()
        {
        }
        public EventItem (string name )
            : this(0, "System", name, "", EventLevel.Information, EventType.EventUI_Notify)
        {
        }
        public EventItem(string name, string description)
            : this(0, "System", name, description, EventLevel.Information, EventType.EventUI_Notify)
        {
        }
        public EventItem(string source, string name, string description)
        :this((int)eEvent.INFO_FA, source,name,description, EventLevel.Information, EventType.EventUI_Notify)
        {
        }
        public EventItem(string name, EventType type, EventLevel level)
            : this(0,"System", name, "", level, type)
        {
        }
        public EventItem(string source, string name, string description, EventLevel level, EventType type)
            : this (0, source,name, description, level, type)
        {
        }
        public EventItem(int id, string source, string name, string description, EventLevel level, EventType type)
        {
            EventEnum = name;
            Type = type;
            Level = level;
            Source = source;
            Description = description;
            Id = id;
        }
    }
}