using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FLY.Thick.Base.IService;
using FLY.Thick.Base.Common;
using System.ComponentModel;

namespace FLY.Thick.Base.Server
{
    public class Password : IPasswordService, Misc.ISaveToXml, INotifyPropertyChanged
    {
        private List<PasswordCell> pws = new List<PasswordCell>();
        /// <summary>
        /// 密码列表。 储存在 服务器
        /// </summary>
        public List<PasswordCell> PWs 
        {
            get {
                return pws;
            }
        }
        private string param_path = "password.xml";
        public Password() 
        {
            

        }
        public Password(string param_path) 
        {
            if (!string.IsNullOrEmpty(param_path))
                this.param_path = param_path;
            Load();
        }
        public AUTHORIZE_RESULT Authorize(string pw, int level)
        {
            return AUTHORIZE_RESULT.OK;
        }

        public void Apply()
        {
            //保证密码都是唯一的！！！
            for (int i = 0; i < PWs.Count(); i++)
            {
                string p = PWs[i].Password;
                List<PasswordCell> pwlist = PWs.FindAll(pw => pw.Password == p);
                if (pwlist.Count > 1) 
                {
                    //有重复，删除第2个
                    PWs.Remove(pwlist[1]);
                }
            }
            Save();
            NotifyPropertyChanged("PWs");
        }
        void Save() 
        {
            Misc.SaveToXmlHepler.Save(param_path, this);
        }

        static Password()
        {
            Misc.SaveToXmlHepler.Regist(typeof(PasswordCell));
        }
        void Load()
        {
            Misc.SaveToXmlHepler.Load(param_path, this);
            if (PWs.Count() == 0)
            {
                PWs.Add(new PasswordCell() { Password = "flymeasure", Level = 10 });
                PWs.Add(new PasswordCell() { Password = "1", Level = 2 });
                Save();
            }
        }
        public string[] GetSavePropertyNames()
        {
            return new string[] { "PWs" };
        }
        #region INotifyPropertyChanged 成员

        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

        protected void NotifyPropertyChanged(string propertyname)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyname));
            }
        }

        #endregion
    }
}
