namespace CMSMicroservice.Application.ProductsCQ.Queries.GetLowStockProducts;

/// <summary>
/// دریافت محصولات کم موجودی
/// </summary>
public record GetLowStockProductsQuery : IRequest<GetLowStockProductsResponseDto>
{
    /// <summary>
    /// آستانه موجودی (پیش‌فرض: 10)
    /// </summary>
    public int Threshold { get; init; } = 10;
    
    /// <summary>
    /// شماره صفحه (پیش‌فرض: 1)
    /// </summary>
    public int PageIndex { get; init; } = 1;

    /// <summary>
    /// تعداد در هر صفحه (پیش‌فرض: 20)
    /// </summary>
    public int PageSize { get; init; } = 20;
    
    /// <summary>
    /// فقط محصولات انحصاری باشگاه (اختیاری)
    /// </summary>
    public bool? IsClubExclusive { get; init; }
}

/// <summary>
/// پاسخ لیست محصولات کم موجودی
/// </summary>
public class GetLowStockProductsResponseDto
{
    public MetaData MetaData { get; set; } = new();
    public List<LowStockProductDto> Products { get; set; } = new();
}

/// <summary>
/// اطلاعات محصول کم موجودی
/// </summary>
public class LowStockProductDto
{
    public long Id { get; set; }
    public string Title { get; set; } = string.Empty;
    public long Price { get; set; }
    public int Discount { get; set; }
    public int RemainingCount { get; set; }
    public int SaleCount { get; set; }
    public bool IsClubExclusive { get; set; }
    public string ImagePath { get; set; } = string.Empty;
    public string ThumbnailPath { get; set; } = string.Empty;
    public DateTime Created { get; set; }
    public DateTime? LastModified { get; set; }
}
