using Managing.Domain.Accounts;
using Managing.Domain.Scenarios;
using Managing.Domain.Statistics;
using Managing.Domain.Strategies;
using Managing.Domain.Trades;
using static Managing.Common.Enums;

namespace Managing.Application.Abstractions.Services;

public interface ITradingService
{
    Scenario GetScenarioByName(string scenario);
    void InsertSignal(Signal signal);
    void InsertPosition(Position position);
    void UpdatePosition(Position position);
    Strategy GetStrategyByName(string strategy);
    void InsertScenario(Scenario scenario);
    void InsertStrategy(Strategy strategy);
    IEnumerable<Scenario> GetScenarios();
    IEnumerable<Strategy> GetStrategies();
    void DeleteScenario(string name);
    void DeleteStrategy(string name);
    void DeleteScenarios();
    void DeleteStrategies();
    Position GetPositionByIdentifier(string identifier);
    IEnumerable<Position> GetPositions(PositionInitiator positionInitiator);
    IEnumerable<Position> GetPositions();
    IEnumerable<Position> GetPositionsByStatus(PositionStatus positionStatus);
    Task<Position> ManagePosition(Account account, Position position);
    void UpdateFee(TradingExchanges evm);
    decimal GetFee(Account account, bool isForPaperTrading = false);
    Task WatchTrader();
    IEnumerable<Trader> GetTradersWatch();
    void UpdateDeltaNeutralOpportunities();
    void UpdateScenario(Scenario scenario);
    void UpdateStrategy(Strategy strategy);
    Task<IEnumerable<Position>> GetBrokerPositions(Account account);
}