using Fantasy;
using Fantasy.Async;
using Fantasy.Helper;
using Fantasy.Network.Interface;

namespace NB.Map;

public class C2Map_MoveHandler : Route<MapUnit, C2Map_Move>
{
    protected override async FTask Run(MapUnit entity, C2Map_Move message)
    {
        var roomManageComponent = entity.Scene.GetComponent<RoomManageComponent>();
        var roomId = entity.RoomId;
        var room = roomManageComponent.Get(roomId);
        if (room == null)
        {
            return;
        }
        // var mapUnitManageComponent = entity.Scene.GetComponent<MapUnitManageComponent>();
        var notifyMessage = new Map2C_MoveNotify()
        {
            Id = entity.Id,
            Position = message.Position,
            Rotation = message.Rotation,
            IsStop = message.IsStop,
            Direction = message.Direction,
            Timestamp = TimeHelper.Now
        };

        entity.Position.x = message.Position.x;
        entity.Position.y = message.Position.y;
        entity.Position.z = message.Position.z;

        entity.Rotation.x = message.Rotation.x;
        entity.Rotation.y = message.Rotation.y;
        entity.Rotation.z = message.Rotation.z;

        foreach (var (_, unit) in room.Units)
        {
            // if (unit.Id == entity.Id) continue;
            entity.Scene.NetworkMessagingComponent.SendInnerRoute(unit.GateRouteId, notifyMessage);
        }
        

        await FTask.CompletedTask;
    }
}