using System.Collections.Generic;

namespace Hitsuji.Framework.DataClient.Model
{
    public abstract class BaseContentModel : IContentModel
    {
        public string Id 
        {
            get { return id_.ToUpper(); }
            set
            {
                var old = id_;
                id_ = value;
                onBasePropertyChanged("ID", old, id_);
            }
        }
        private string id_;

        public string Enable
        {
            get { return enable_.ToUpper(); }
            set
            {
                var old = enable_;
                enable_ = value;
                onBasePropertyChanged("Enable", old, enable_);
            }
        }
        private string enable_;

        protected abstract void onBasePropertyChanged(string propertyName, object oldValue, object newValue);
        public abstract List<AbsoluteDataResult> IsAbsoluteData();
        public abstract IContentModel DeepCopy();

    }

    /// <summary>
    /// データの正当性を検証し、結果を取得するクラス
    /// </summary>
    public class AbsoluteDataResult : IAbsoluteDataResult
    {
        /// <summary>
        /// データの正当性の確認結果情報を有するモデル。
        /// ※確認結果の初期値は Result = ResultCodes.IsAbsoluteData を設定しているため、
        /// データが不正な場合は明示的に IsAbsoluteData を設定すること。
        /// </summary>
        public AbsoluteDataResult()
        {
            Result = ResultCodes.IsAbsoluteData;
        }

        public ResultCodes Result { get { return result_; } set { result_ = value; } }
        private ResultCodes result_;

        public string id { get { return id_; } set { id_ = value; } }
        private string id_;

        public string name { get { return name_; } set { name_ = value; } }
        private string name_;

        public string Content { get { return content_; } set { content_ = value; } }
        private string content_;

        public object org { get { return org_; } set { org_ = value; } }
        private object org_;
    }

}
