using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Misc;
using System.Net;
using System.IO;
using System.ComponentModel;
using System.Xml.Serialization;
using FLY.Thick.Base.Common;

namespace FLY.Thick.Base.Server
{
    //代替TDInitParam
    public class SysParam : INotifyPropertyChanged, ISaveToXml
    {
        #region 属性，成员变量的代理

        /// <summary>
        /// 本机obj服务地址
        /// </summary>
        [PropertyChanged.DoNotCheckEquality]
        public IPEndPoint LocalEP { get; set; } = Misc.StringConverter.ToIPEndPoint("127.0.0.1:20006");

        /// <summary>
        /// AD盒地址
        /// </summary>
        [PropertyChanged.DoNotCheckEquality]
        public IPEndPoint FLYAD7EP { get; set; } = Misc.StringConverter.ToIPEndPoint("192.168.250.10:20006");

        /// <summary>
        /// AD盒通讯使用 CRC校验
        /// </summary>
        public bool FLYAD7_HasCRC { get; set; } = false;
        
        /// <summary>
        /// grid 平滑
        /// </summary>
        public int FLYAD7_GridSmooth { get; set; } = 0;

        /// <summary>
        /// 电脑计算速度，不通过AD盒获取
        /// </summary>
        public bool FLYAD7_IsCalSpeed { get; set; } = true;

        #endregion

        private string param_path = "sysparam.xml";
        public SysParam()
        {
            this.PropertyChanged += new PropertyChangedEventHandler(SysParam_PropertyChanged);
        }
        public SysParam(string param_path) 
        {
            if (!string.IsNullOrEmpty(param_path))
                this.param_path = param_path;
            Load();
            this.PropertyChanged += new PropertyChangedEventHandler(SysParam_PropertyChanged);
        }
        void SysParam_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (isLoading)
                return;
            if ((e.PropertyName == "FLYAD7EP")||
                (e.PropertyName == "FLYAD7_HasCRC")||
                (e.PropertyName == "FLYAD7_GridSmooth")||
                (e.PropertyName == "FLYAD7_IsCalSpeed")
            )
            {
                Save();
            }
        }
        bool isLoading = false;
        public bool Load()
        {
            isLoading = true;
            bool ret = Misc.SaveToXmlHepler.Load(param_path, this);
            isLoading = false;
            return ret;
        }

        public void Save()
        {
            Misc.SaveToXmlHepler.Save(param_path, this);

        }
        #region INotifyPropertyChanged 成员

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion

        public string[] GetSavePropertyNames()
        {
            return new string[]{
            "LocalEP",
            "FLYAD7EP",
            "FLYAD7_HasCRC",
            "FLYAD7_GridSmooth",
            "FLYAD7_IsCalSpeed"
            };
        }
    }
}
