using static Managing.Common.Enums;

namespace Managing.Api.Models.Requests;

/// <summary>
/// Request model for getting paginated bots with filtering and sorting
/// </summary>
public class GetBotsPaginatedRequest
{
    /// <summary>
    /// Page number (1-based). Default is 1.
    /// </summary>
    public int PageNumber { get; set; } = 1;

    /// <summary>
    /// Number of items per page. Default is 10, maximum is 100.
    /// </summary>
    public int PageSize { get; set; } = 10;

    /// <summary>
    /// Filter by bot status. If null, returns bots of all statuses.
    /// </summary>
    public BotStatus? Status { get; set; }

    /// <summary>
    /// Filter by user ID. If null, returns bots for all users.
    /// </summary>
    public int? UserId { get; set; }

    /// <summary>
    /// Filter by bot name (partial match, case-insensitive). If null, no name filtering is applied.
    /// </summary>
    public string? Name { get; set; }

    /// <summary>
    /// Filter by ticker (partial match, case-insensitive). If null, no ticker filtering is applied.
    /// </summary>
    public string? Ticker { get; set; }

    /// <summary>
    /// Filter by agent name (partial match, case-insensitive). If null, no agent name filtering is applied.
    /// </summary>
    public string? AgentName { get; set; }

    /// <summary>
    /// Sort field. Valid values: "Name", "Ticker", "Status", "CreateDate", "StartupTime", "Pnl", "WinRate", "AgentName".
    /// Default is "CreateDate".
    /// </summary>
    public string SortBy { get; set; } = "CreateDate";

    /// <summary>
    /// Sort direction. Default is "Desc" (descending).
    /// </summary>
    public string SortDirection { get; set; } = "Desc";
} 