using ET.Client;
using ET.EventType;
using FairyGUI;
using System.Collections.Generic;
using UnityEngine;

namespace ET
{
    [Event]
    public class RankEventHandler : BEvent<RankChangeEvent>
    {
        protected override async ETTask OnEvent(RankChangeEvent a)
        {
            GameoverEventHandler.RankList = a.InfoList;
            await ETTask.CompletedTask;
        }
    }

    [Event]
    public class GameoverEventHandler : BEvent<EventType.GameoverEvent>
    {
        public static List<RankInfo> RankList = new();
        public static bool IsGameOver = false;

        protected override async ETTask OnEvent(EventType.GameoverEvent args)
        {
            IsGameOver = true;

            GComponent view;
            if(args.winForce == 1)
            {
                view = await UIHelper.Create("CommonDialog", "GameoverSuccess");
            }
            else
            {
                view = await UIHelper.Create("CommonDialog", "GameoverFailed");
            }

            //等1秒,等排行榜数据
            await TimerComponent.Instance.WaitAsync(1000);

            view.GetChild("btn_ok").onClick.Set(async () =>
            {
                GRoot.inst.RemoveChild(view);

                view = await UIHelper.Create("paiming", "paiming");
                InitRankView(view);
                view.GetChild("btn_ok").onClick.Set(() =>
                {
                    RankList = null;
                    IsGameOver = false;

                    UIHelper.RemoveAllUiExceptSth();
                    GlobalViewMgr.Instance.ReOpenGame();
                    EventSystem.Instance.Publish<ReOpenGame>();
                });
            });
        }

        //展示排行榜
        private void InitRankView(GComponent view)
        {
            var list = view.GetChild("list").asList;
            var data = RankList ?? new List<RankInfo>();

            int i = 0;
            GComponent chd;
            for (; i < data.Count; i++)
            {
                if (i >= list.numChildren)
                {
                    chd = UIPackage.CreateObject("paiming", $"paiming_0{((i<3) ? (i+1) : 4)}").asCom;
                    list.AddChild(chd);
                }
                else
                {
                    chd = list.GetChildAt(i).asCom;
                    chd.visible = true;
                }

                if(i >= 3)
                {
                    chd.GetChild("rank").text = (i + 1).ToString();
                }
                chd.GetChild("name").text = data[i].Name;
                chd.GetChild("score").text = data[i].Value.ToString();

                var mask = chd.GetChild("icon").asCom;
                var icon = mask.GetChild("iconLoader").asLoader;
                var url = data[i].Url;
                if (!string.IsNullOrEmpty(url))
                {
                    LoadHeadIcon(icon, url).Coroutine();
                }
            }
            for (; i < list.numChildren; i++)
            {
                list.GetChildAt(i).visible = false;
            }
        }

        private async ETTask LoadHeadIcon(GLoader loader, string url)
        {
            var tex = await UrlImageLoader.Instance.LoadImage(url);
            if (tex != null)
            {
                if (GRoot.inst.GetChild("paiming") != null)
                {
                    loader.texture = new NTexture(tex);
                }
            }
        }
    }
}