using Managing.Application.Abstractions.Repositories; using Managing.Application.Abstractions.Shared; using Managing.Common; using Managing.Domain.Backtests; using Managing.Domain.Bots; using Managing.Domain.Candles; using Managing.Domain.Users; namespace Managing.Application.Abstractions.Services { public interface IBacktester { /// /// Runs a trading bot backtest with the specified configuration and date range. /// Automatically handles different bot types based on config.BotType. /// Returns a LightBacktest for efficient Orleans serialization. /// /// The trading bot configuration (must include Scenario object or ScenarioName) /// The start date for the backtest /// The end date for the backtest /// The user running the backtest (optional) /// Whether to save the backtest results /// Whether to include candles and indicators values in the response /// The request ID to associate with this backtest (optional) /// Additional metadata to associate with this backtest (optional) /// The lightweight backtest results Task RunTradingBotBacktest( TradingBotConfig config, DateTime startDate, DateTime endDate, User user = null, bool save = false, bool withCandles = false, string requestId = null, object metadata = null); /// /// Runs a trading bot backtest with pre-loaded candles. /// Automatically handles different bot types based on config.BotType. /// Returns a LightBacktest for efficient Orleans serialization. /// /// The trading bot configuration (must include Scenario object or ScenarioName) /// The candles to use for backtesting /// The user running the backtest (optional) /// Whether to include candles and indicators values in the response /// The request ID to associate with this backtest (optional) /// Additional metadata to associate with this backtest (optional) /// The lightweight backtest results Task RunTradingBotBacktest( TradingBotConfig config, HashSet candles, User user = null, bool withCandles = false, string requestId = null, object metadata = null); // Additional methods for backtest management Task DeleteBacktestAsync(string id); bool DeleteBacktests(); IEnumerable GetBacktestsByUser(User user); Task> GetBacktestsByUserAsync(User user); IEnumerable GetBacktestsByRequestId(Guid requestId); Task> GetBacktestsByRequestIdAsync(Guid requestId); (IEnumerable Backtests, int TotalCount) GetBacktestsByRequestIdPaginated(Guid requestId, int page, int pageSize, string sortBy = "score", string sortOrder = "desc"); Task<(IEnumerable Backtests, int TotalCount)> GetBacktestsByRequestIdPaginatedAsync(Guid requestId, int page, int pageSize, string sortBy = "score", string sortOrder = "desc"); Task GetBacktestByIdForUserAsync(User user, string id); Task DeleteBacktestByUserAsync(User user, string id); Task DeleteBacktestsByIdsForUserAsync(User user, IEnumerable ids); bool DeleteBacktestsByUser(User user); (IEnumerable Backtests, int TotalCount) GetBacktestsByUserPaginated( User user, int page, int pageSize, Enums.BacktestSortableColumn sortBy, string sortOrder = "desc", BacktestsFilter? filter = null); Task<(IEnumerable Backtests, int TotalCount)> GetBacktestsByUserPaginatedAsync( User user, int page, int pageSize, Enums.BacktestSortableColumn sortBy, string sortOrder = "desc", BacktestsFilter? filter = null); Task DeleteBacktestsByRequestIdAsync(Guid requestId); Task DeleteBacktestsByFiltersAsync(User user, BacktestsFilter filter); Task InsertBundleBacktestRequestForUserAsync(User user, BundleBacktestRequest bundleRequest, bool saveAsTemplate = false); Task SaveBundleBacktestRequestAsync(User user, BundleBacktestRequest bundleRequest); Task CreateJobsForBundleRequestAsync(BundleBacktestRequest bundleRequest); IEnumerable GetBundleBacktestRequestsByUser(User user); Task> GetBundleBacktestRequestsByUserAsync(User user); BundleBacktestRequest? GetBundleBacktestRequestByIdForUser(User user, Guid id); Task GetBundleBacktestRequestByIdForUserAsync(User user, Guid id); void UpdateBundleBacktestRequest(BundleBacktestRequest bundleRequest); Task UpdateBundleBacktestRequestAsync(BundleBacktestRequest bundleRequest); void DeleteBundleBacktestRequestByIdForUser(User user, Guid id); Task DeleteBundleBacktestRequestByIdForUserAsync(User user, Guid id); IEnumerable GetBundleBacktestRequestsByStatus(BundleBacktestRequestStatus status); Task> GetBundleBacktestRequestsByStatusAsync(BundleBacktestRequestStatus status); // Admin methods - no user filter (IEnumerable BundleRequests, int TotalCount) GetBundleBacktestRequestsPaginated( int page, int pageSize, Enums.BundleBacktestRequestSortableColumn sortBy = Enums.BundleBacktestRequestSortableColumn.CreatedAt, string sortOrder = "desc", BundleBacktestRequestsFilter? filter = null); Task<(IEnumerable BundleRequests, int TotalCount)> GetBundleBacktestRequestsPaginatedAsync( int page, int pageSize, Enums.BundleBacktestRequestSortableColumn sortBy = Enums.BundleBacktestRequestSortableColumn.CreatedAt, string sortOrder = "desc", BundleBacktestRequestsFilter? filter = null); Task GetBundleBacktestRequestsSummaryAsync(); // Admin delete methods - no user filter Task DeleteBundleBacktestRequestByIdAsync(Guid id); } }