using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ETD.Frame
{
    // <summary>
    /// 实体基类
    /// </summary>
    [Serializable]
    public abstract class EntityBase
    {


        //private string _OrderBy = "";
        ///// <summary>
        ///// 排序
        ///// </summary>
        //public string OrderBy
        //{
        //    get { return _OrderBy; }
        //    set { _OrderBy = value; }
        //}
        private string _WhereSql = "";
        /// <summary>
        /// 自定义查询条件
        /// </summary>
        public string WhereSql
        {
            get
            {
                return this._WhereSql;
            }
            set
            {
                value = value.Trim().ToLower();
                if (value.StartsWith("where"))
                {
                    value = value.Substring(5, value.Length - 5);
                }
                this._WhereSql = value;
            }
        }
        private EntityPersistType persistType;
        /// <summary>
        /// 操作类型
        /// </summary>
        public EntityPersistType PersistType
        {
            get { return persistType; }
            set { persistType = value; }
        }
        /// <summary>
        /// 模块
        /// </summary>
        public abstract string ModuleName { get; }
        /// <summary>
        /// 排序
        /// </summary>
        public abstract string OrderBy { get; set; }

        private Dictionary<string, EntyTypeData> _entydic;
        /// <summary>
        /// 实体集合操作
        /// </summary>
        public Dictionary<string, EntyTypeData> EntyDic
        {
            get { return _entydic; }
            set { _entydic = value; }
        }
        public Dictionary<string, EntityValue> _values = new Dictionary<string, EntityValue>();
        /// <summary>
        /// 状态值属性
        /// </summary>
        public Dictionary<string, EntityValue> Values
        {
            get { return this._values; }
            set { this._values = value; }
        }
        /// <summary>
        /// 给实体赋值
        /// </summary>
        /// <param name="FieldName">字段名称</param>
        /// <param name="defaultValue">默认值</param>
        protected void SetChanaged(string FieldName, object defaultValue)
        {
            if (!Values.ContainsKey(FieldName))
            {
                EntityValue val = new EntityValue();
                val.OriginalValue = defaultValue;
                val.FieldName = FieldName;
                val.IsChanage = false;
                Values.Add(FieldName, val);
            }
            else
            {
                EntityValue val = Values[FieldName];
                if (object.Equals(val.OriginalValue, defaultValue))
                {
                    val.CurrentValue = null;
                    val.IsChanage = false;
                }
                else
                {
                    val.CurrentValue = defaultValue;
                    val.IsChanage = true;
                }
            }
        }
        /// <summary>
        /// 获得对象的值
        /// </summary>
        /// <param name="FieldName">字段名称</param>
        /// <returns></returns>
        protected object ToValue(string FieldName)
        {
            if (Values.ContainsKey(FieldName))
            {
                EntityValue val = Values[FieldName];
                if (val.CurrentValue != null)
                {
                    return val.CurrentValue;
                }
                if (val.OriginalValue != null)
                {
                    return val.OriginalValue;
                }
                return null;
            }
            return null;
        }
        /// <summary>
        /// 属性值修改情况
        /// </summary>
        /// <param name="FieldName">字段名称</param>
        /// <param name="currentValue">当前值</param>
        protected void ToChanaged(string FieldName, object currentValue)
        {
            if (Values.ContainsKey(FieldName))
            {
                EntityValue val = Values[FieldName];
                if (object.Equals(val.OriginalValue, currentValue))
                {
                    val.CurrentValue = null;
                    val.IsChanage = false;
                }
                else
                {
                    val.CurrentValue = currentValue;
                    val.IsChanage = true;
                }
            }
        }

    }
}