namespace Managing.Api.Models.Responses
{
    /// <summary>
    /// Represents a high-performing strategy with its name and PnL value
    /// </summary>
    public class StrategyPerformance
    {
        /// <summary>
        /// Name of the strategy bot
        /// </summary>
        public string StrategyName { get; set; }

        /// <summary>
        /// Profit and Loss value of the strategy
        /// </summary>
        public decimal PnL { get; set; }

        public string AgentName { get; set; }
    }

    /// <summary>
    /// Represents a high-performing strategy with its name and ROI value
    /// </summary>
    public class StrategyRoiPerformance
    {
        /// <summary>
        /// Name of the strategy bot
        /// </summary>
        public string StrategyName { get; set; }

        /// <summary>
        /// Return on Investment percentage of the strategy
        /// </summary>
        public decimal Roi { get; set; }

        /// <summary>
        /// Profit and Loss value of the strategy
        /// </summary>
        public decimal PnL { get; set; }

        /// <summary>
        /// Volume traded by the strategy
        /// </summary>
        public decimal Volume { get; set; }
    }

    /// <summary>
    /// View model containing the top performing strategies by ROI
    /// </summary>
    public class TopStrategiesViewModel
    {
        /// <summary>
        /// List of the top performing strategies by ROI
        /// </summary>
        public List<StrategyPerformance> TopStrategies { get; set; } = new List<StrategyPerformance>();
    }

    /// <summary>
    /// View model containing the top performing strategies by ROI
    /// </summary>
    public class TopStrategiesByRoiViewModel
    {
        /// <summary>
        /// List of the top performing strategies by ROI
        /// </summary>
        public List<StrategyRoiPerformance> TopStrategiesByRoi { get; set; } = new List<StrategyRoiPerformance>();
    }

    /// <summary>
    /// Represents a high-performing agent with its name and PnL value
    /// </summary>
    public class AgentPerformance
    {
        /// <summary>
        /// Name of the agent
        /// </summary>
        public string AgentName { get; set; }

        /// <summary>
        /// Profit and Loss value of the agent
        /// </summary>
        public decimal PnL { get; set; }

        /// <summary>
        /// Total ROI percentage of the agent
        /// </summary>
        public decimal TotalROI { get; set; }

        /// <summary>
        /// Total volume traded by the agent
        /// </summary>
        public decimal TotalVolume { get; set; }

        /// <summary>
        /// Number of active strategies for this agent
        /// </summary>
        public int ActiveStrategiesCount { get; set; }

        /// <summary>
        /// Total balance including USDC and open position values
        /// </summary>
        public decimal TotalBalance { get; set; }
    }

    /// <summary>
    /// View model containing the top performing agents by PnL
    /// </summary>
    public class TopAgentsByPnLViewModel
    {
        /// <summary>
        /// List of the top performing agents by PnL
        /// </summary>
        public List<AgentPerformance> TopAgentsByPnL { get; set; } = new List<AgentPerformance>();
    }
}