using Managing.Domain.Bots;
using Managing.Domain.MoneyManagements;

namespace Managing.Domain.Backtests;

/// <summary>
/// Request model for running a backtest
/// </summary>
public class RunBacktestRequest
{
    /// <summary>
    /// The trading bot configuration request to use for the backtest
    /// </summary>
    public TradingBotConfigRequest Config { get; set; }

    /// <summary>
    /// The start date for the backtest
    /// </summary>
    public DateTime StartDate { get; set; }

    /// <summary>
    /// The end date for the backtest
    /// </summary>
    public DateTime EndDate { get; set; }

    /// <summary>
    /// The starting balance for the backtest
    /// </summary>
    public decimal Balance { get; set; }

    /// <summary>
    /// Whether to only watch the backtest without executing trades
    /// </summary>
    public bool WatchOnly { get; set; } = false;

    /// <summary>
    /// Whether to save the backtest results
    /// </summary>
    public bool Save { get; set; } = false;

    /// <summary>
    /// Whether to include candles and indicators values in the response.
    /// Set to false to reduce response size dramatically.
    /// </summary>
    public bool WithCandles { get; set; } = false;

    /// <summary>
    /// The name of the money management to use (optional if MoneyManagement is provided)
    /// </summary>
    public string? MoneyManagementName { get; set; }

    /// <summary>
    /// The money management details (optional if MoneyManagementName is provided)
    /// </summary>
    public MoneyManagement? MoneyManagement { get; set; }
}