using Managing.Domain.Backtests;
using Managing.Domain.Statistics;
using Managing.Domain.Trades;
using Managing.Domain.Users;
using static Managing.Common.Enums;

namespace Managing.Application.Abstractions.Services;

public interface IMessengerService
{
    Task SendSignal(string message, TradingExchanges exchange, Ticker ticker, TradeDirection direction,
        Timeframe timeframe);

    Task SendPosition(Position position);
    Task SendClosingPosition(Position position);
    Task SendMessage(string message);
    Task SendMessage(string message, string channelId);

    Task SendTradeMessage(string message, bool isBadBehavior = false, User user = null);
    Task SendIncreasePosition(string address, Trade trade, string copyAccountName, Trade? oldTrade = null);
    Task SendClosedPosition(string address, Trade oldTrade);
    Task SendDecreasePosition(string address, Trade newTrade, decimal decreaseAmount);
    Task SendBestTraders(List<Trader> traders);
    Task SendBadTraders(List<Trader> filteredTrader);
    Task SendDowngradedFundingRate(FundingRate oldRate);
    Task SendNewTopFundingRate(FundingRate newRate);
    Task SendFundingRateUpdate(FundingRate oldRate, FundingRate newRate);
    Task SendBacktestNotification(Backtest backtest);
    Task SendGeneticAlgorithmNotification(GeneticRequest request, double bestFitness, object? bestChromosome);
}