using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace Future.Contract
{
    /// 
    /// 所有存储于数据库中的数据档案的基类
    /// 
    [DataContract]
    public class FutureArchive : FutureObject
    {
        /// 
        /// 是否已经被标记选择
        /// 
        public bool IsSelected { get; set; }
        /// 
        /// 数据记录的唯一标识
        /// 
        [DataMember]
        public string RecordID { get; set; }
        /// 
        /// 数据档案的唯一标识
        /// 
        [DataMember]
        public string ArchiveID { get; set; }
        /// 
        /// 数据档案的标题
        /// 
        [DataMember]
        public string Title { get; set; }
        /// 
        /// 数据档案的描述
        /// 
        [DataMember]
        public string Remark { get; set; }
        /// 
        /// 数据档案是否处于可用状态
        /// 
        [DataMember]
        public bool IsAlive { get; set; }
        /// 
        /// 是否为一份档案的活动记录
        /// 
        [DataMember]
        public bool IsCurrent { get; set; }
        /// 
        /// 数据档案本次归档的操作用户
        /// 
        [DataMember]
        public string OperatorID { get; set; }
        /// 
        /// 数据档案本次归档的操作时间
        /// 
        [DataMember]
        public DateTime UpdateDateTime { get; set; }
        /// 
        /// 深度拷贝对象:将当前对象序列化,再通过反序列化方式创建新对象,从而实现对象的深度拷贝
        /// 
        /// 
        public override IFuture Clone()
        {
            FutureArchive result = new FutureArchive();
            result.Cover(this);
            return result;
        }
        public override bool Cover(IFuture refer)
        {
            if (!base.Cover(refer)) return false;
            FutureArchive archive = refer as FutureArchive;
            //if (archive == null) return false;
            this.RecordID = archive.RecordID;
            this.ArchiveID = archive.ArchiveID;
            this.Title = archive.Title;
            this.Remark = archive.Remark;
            this.IsCurrent = archive.IsCurrent;
            this.IsAlive = archive.IsAlive;
            this.OperatorID = archive.OperatorID;
            this.UpdateDateTime = archive.UpdateDateTime;
            return true;
        }
    }
}