using ET.EventType;
using FairyGUI;

namespace ET.Client
{
    [Event(SceneType.Client)]
    public class SceneChangeFinishEvent_CreateUIHelp : BEvent<SceneLoadFinish>
    {
        public override void OnEvent(SceneLoadFinish a)
        {
            asyncTask().Coroutine();
        }
        private async ETTask asyncTask()
        {
            Log.Debug("loading HUD");
            var view = await UIHelper.Create("HUD");
            HUDMgr.InitView(view);
        }
    }

    [Event(SceneType.None)]
    public class SkillChangeEventHandler : BEvent<SkillChangeEvent>
    {
        public override void OnEvent(SkillChangeEvent a)
        {
            Log.Debug("actor's skill changed.");
            /*var view = UIHelper.GetUI("HUD") as GComponent;
            if(view != null)
            {
                HUDMgr.InitView(view);
            }*/
        }
    }

    [Event(SceneType.None)]
    public class HPRefreshEventHandler : BEvent<HPRefresh>
    {
        public override void OnEvent(HPRefresh a)
        {
            var view = UIHelper.GetUI("HUD") as GComponent;
            if(view == null)
            {
                return;
            }

            int index = (int)a.HPIndex;
            var progress = view.GetChild($"progressbar_{index}") as GProgressBar;
            progress.visible = true;
            var txt = view.GetChild($"txt_hp{index}");
            progress.value = a.Progress;
            txt.text = a.Progress.ToString("F2") + "%";
        }
    }

    public static class HUDMgr
    {
        public static void InitView(GComponent view)
        {
            var btn1 = view.GetChild("btn_skill1");
            var btn2 = view.GetChild("btn_skill2");

            /*var actor = UnitMgr.Instance.Actor;
            if (actor == null || !actor.IsSkillOk)
            {
                btn1.visible = false;
                btn2.visible = false;
                return;
            }
            btn1.visible = actor.GetSkill(0) != null;
            btn2.visible = actor.GetSkill(1) != null;

            var img = view.GetChild("img_direction");
            btn1.onClick.Set(() => {
                EventSystem.Instance.Publish<LaunchSkillEvent>(LaunchSkillEvent.Static.Clone(0)) ;
            });

            btn2.onClick.Set(() => {
                EventSystem.Instance.Publish<LaunchSkillEvent>(LaunchSkillEvent.Static.Clone(1));
            });*/

            btn1.visible = false;
            btn2.visible = false;
            for (int i=1; i<=4; i++)
            {
                var btn = view.GetChild($"btn_func{i}");
                var index = i;
                btn.onClick.Set(() =>
                {
                    if(index == 1)
                    {
                        GlobalViewComponent.Instance.HeadbarView.visible = !GlobalViewComponent.Instance.HeadbarView.visible;
                        return;
                    }
                    EventSystem.Instance.Publish<BattleFunc>(BattleFunc.Static.Clone(index));
                });
            }

            bool isMute = SoundManager.Instance.UnityAudioSource.mute;
            var btnmute = view.GetChild("btn_mute");
            var gou = (btnmute as GComponent).GetChild("checked");
            gou.visible = isMute;
            btnmute.onClick.Set(() =>
            {
                isMute = !isMute;
                gou.visible = isMute;
                SoundManager.Instance.UnityAudioSource.mute = isMute;
                GameSetting.Instance.SetBool(GameSetting.Sets.Mute_int, isMute);
            });

            var progress1 = view.GetChild("progressbar_1") as GProgressBar;
            var progress2 = view.GetChild("progressbar_2") as GProgressBar;
            progress1.visible = progress2.visible = false;
            var txthp1 = view.GetChild("txt_hp1");
            txthp1.text = "";
            var txthp2 = view.GetChild("txt_hp2");
            txthp2.text = "";
        }
    }
}