namespace CMSMicroservice.Application.ProductsCQ.Commands.BulkUpdateProductPrices;

/// <summary>
/// به‌روزرسانی دسته‌ای قیمت محصولات
/// </summary>
public record BulkUpdateProductPricesCommand : IRequest<BulkUpdateProductPricesResponseDto>
{
    /// <summary>
    /// لیست محصولات و قیمت‌های جدید
    /// </summary>
    public List<ProductPriceUpdate> Products { get; init; } = new();
}

/// <summary>
/// مدل به‌روزرسانی قیمت یک محصول
/// </summary>
public class ProductPriceUpdate
{
    /// <summary>
    /// شناسه محصول
    /// </summary>
    public long ProductId { get; set; }

    /// <summary>
    /// قیمت جدید (ریال)
    /// </summary>
    public long NewPrice { get; set; }

    /// <summary>
    /// درصد تخفیف جدید (اختیاری)
    /// </summary>
    public int? NewDiscount { get; set; }
    
    /// <summary>
    /// درصد تخفیف باشگاه جدید (اختیاری)
    /// </summary>
    public int? NewClubDiscountPercent { get; set; }
}

/// <summary>
/// پاسخ به‌روزرسانی دسته‌ای قیمت
/// </summary>
public class BulkUpdateProductPricesResponseDto
{
    /// <summary>
    /// تعداد محصولات به‌روزرسانی شده
    /// </summary>
    public int UpdatedCount { get; set; }

    /// <summary>
    /// تعداد محصولات ناموفق
    /// </summary>
    public int FailedCount { get; set; }

    /// <summary>
    /// جزئیات خطاها
    /// </summary>
    public List<string> Errors { get; set; } = new();

    /// <summary>
    /// آیا همه موفق بودند
    /// </summary>
    public bool IsSuccess => FailedCount == 0;
}
