using Managing.Domain.Scenarios;
using Managing.Domain.Strategies;
using Managing.Domain.Trades;
using Managing.Domain.Users;
using static Managing.Common.Enums;

namespace Managing.Application.Abstractions.Repositories;

public interface ITradingRepository
{
    Scenario GetScenarioByName(string scenario);
    void InsertSignal(Signal signal);
    IEnumerable<Signal> GetSignalsByUser(User user);
    Signal GetSignalByIdentifier(string identifier, User user = null);
    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> GetPositionsByStatus(PositionStatus positionStatus);
    Fee GetFee(TradingExchanges exchange);
    void InsertFee(Fee fee);
    void UpdateFee(Fee fee);
    void UpdateScenario(Scenario scenario);
    void UpdateStrategy(Strategy strategy);
}