using System;
using System.Collections.Generic;
using Thousandto.Code.Center;
using Thousandto.Core.Base;
using CoreEventDefine = UnityEngine.Gonbest.MagicCube.CoreEventDefine;

namespace Thousandto.Code.Logic
{
    /// <summary>
    /// 配置处理的基础类
    /// </summary>
    public class SettingProcessBase
    {
        //当配置被改变后的处理
        private Dictionary<int, MyAction<int>> _settingChangedHandler = new Dictionary<int, MyAction<int>>();

        //初始化
        public void Initialize()
        {
            RegisterSettingChangeHandler();
            GameCenter.EventManager.UnRegFixEventHandle(CoreEventDefine.EID_CORE_GAME_SETTING_CHANGED, OnSettingChanged);
            GameCenter.EventManager.RegFixEventHandle(CoreEventDefine.EID_CORE_GAME_SETTING_CHANGED, OnSettingChanged);
            OnInitializeAfter();
        }

        //加载默认配置
        public void LoadDefault(bool isforce, bool save)
        {
            OnLoadDefault(isforce, save);
        }

        //进入场景时的调用
        public void EnterScene(GameScene scene)
        {
            OnEnterScene(scene);
        }
        //卸载
        public void Uninitialize()
        {
            OnUninitializeBefore();
            GameCenter.EventManager.UnRegFixEventHandle(CoreEventDefine.EID_CORE_GAME_SETTING_CHANGED, OnSettingChanged);
        }

        #region//注册回调的处理函数
        //配置信息改变
        private void OnSettingChanged(object obj,object sender=null)
        {
            try
            {
                GameSettingKeyCode code = (GameSettingKeyCode)obj;
                MyAction<int> handler;
                if (_settingChangedHandler.TryGetValue((int)code, out handler))
                {
                    if (handler != null)
                    {
                        var value = GameSettingCore.Get(code);
                        handler(value);
                    }
                }
            }
            catch(Exception ex)
            {
                UnityEngine.Debug.LogException(ex);
            }
        }

        //注册设置信息改变后的处理句柄
        private void RegisterSettingChangeHandler()
        {
            _settingChangedHandler.Clear();
            OnRegisterSettingChangedHandler();
        }
        #endregion


        #region//保护的函数,由子类继承

        protected virtual void OnRegisterSettingChangedHandler()
        {

        }

        protected virtual void OnInitializeAfter()
        {

        }

        protected virtual void OnUninitializeBefore()
        {

        }

        protected virtual void OnLoadDefault(bool isforce, bool save)
        {

        }

        protected virtual void OnEnterScene(GameScene scene)
        {

        }

        protected void AddSettingChangedHandler(GameSettingKeyCode code, MyAction<int> action)
        {
            _settingChangedHandler.Add((int)code, action);
                
        }


        #endregion

    }
}