using Managing.Application.Abstractions;
using Managing.Application.ManageBot.Commands;
using MediatR;

namespace Managing.Application.ManageBot
{
    /// <summary>
    /// Handler for retrieving a specific strategy owned by a user
    /// </summary>
    public class GetUserStrategyCommandHandler : IRequestHandler<GetUserStrategyCommand, ITradingBot>
    {
        private readonly IBotService _botService;

        public GetUserStrategyCommandHandler(IBotService botService)
        {
            _botService = botService;
        }

        public Task<ITradingBot> Handle(GetUserStrategyCommand request, CancellationToken cancellationToken)
        {
            var allActiveBots = _botService.GetActiveBots();

            // Find the specific strategy that matches both user and strategy name
            var strategy = allActiveBots
                .FirstOrDefault(bot =>
                    bot.User.AgentName == request.AgentName &&
                    bot.Identifier == request.StrategyName);

            return Task.FromResult(strategy);
        }
    }
}