//
//  WalkPacketResponder.cs
//
//  Copyright (c) František Boháček. All rights reserved.
//  Licensed under the MIT license. See LICENSE file in the project root for full license information.
using NosSmooth.Core.Commands;
using NosSmooth.Core.Packets;
using NosSmooth.Packets.Packets.Client.Movement;
using NosSmooth.Packets.Packets.Server.Maps;
using Remora.Results;
namespace NosSmooth.LocalClient.CommandHandlers.Walk;
/// 
/// Responds to  to manage .
/// 
public class WalkPacketResponder : IPacketResponder, IPacketResponder
{
    private readonly WalkStatus _walkStatus;
    /// 
    /// Initializes a new instance of the  class.
    /// 
    /// The walk status.
    public WalkPacketResponder(WalkStatus walkStatus)
    {
        _walkStatus = walkStatus;
    }
    /// 
    public async Task Respond(PacketEventArgs packet, CancellationToken ct = default)
    {
        if (_walkStatus.IsWalking)
        {
            _walkStatus.UpdateWalkTime(packet.Packet.PositionX, packet.Packet.PositionY);
            if (packet.Packet.PositionX == _walkStatus.TargetX && packet.Packet.PositionY == _walkStatus.TargetY)
            {
                await _walkStatus.FinishWalkingAsync(ct);
            }
        }
        return Result.FromSuccess();
    }
    /// 
    public async Task Respond(PacketEventArgs packet, CancellationToken ct = default)
    {
        if (_walkStatus.IsWalking)
        {
            await _walkStatus.CancelWalkingAsync(WalkCancelReason.MapChanged, ct);
        }
        return Result.FromSuccess();
    }
    // TODO: handle teleport on map
}