using UnityEngine;

namespace ET.Client
{
    [Event(SceneType.Current)]
    public class OnNewZoneObjectHandler : AEvent<EventType.OnNewZoneObject>
    {
        protected override async ETTask Run(Scene scene, EventType.OnNewZoneObject args)
        {
            var obj = UnitMgr.Instance.GetUnit(args.ObjectId);
            if(obj is BattleUnit)
            {
                await CreatUnitModel(obj as BattleUnit);
            }
            else
            {
                Log.Error("unknow new object");
            }
        }

        private static CommonLang.Geometry.Vector3 vecTemp = new();
        private async ETTask CreatUnitModel(BattleUnit unit)
        {
            var zu = unit.ZUnit;
            
            var handle = await YooAssetProxy.LoadAssetAsync<GameObject>($"Unit_{zu.Info.FileName}");
            var prefab = handle.GetAssetObject<GameObject>();
            GameObject go = UnityEngine.Object.Instantiate(prefab, GlobalViewComponent.Instance.Unit, true);
            vecTemp.Set(unit.ZUnit.X, unit.ZUnit.Y, unit.ZUnit.Z);
            go.transform.position = RenderUtils.UnityPosFromBattle(vecTemp);
            go.transform.rotation = RenderUtils.UnityRotationFromBattle(zu.Direction);

            ModelViewComponent.Instance.AddChildWithId<UnitRenderComponet, GameObject>(unit.Id, go, true);

            if (unit is BattleActor)
            {
                CameraMgr.FollowMe(go.transform.position);
            }
            Log.Debug($"unitRender({zu.ObjectID}) ok.");

            //TODO: 同步ZoneUnit status
        }
    }
}