namespace CMSMicroservice.Application.CommissionCQ.Queries.GetAvailableWeeks;

public class GetAvailableWeeksResponseDto
{
    /// <summary>هفته جاری</summary>
    public required WeekInfoDto CurrentWeek { get; init; }
    
    /// <summary>هفته‌های محاسبه شده (از جدیدترین به قدیمی‌ترین)</summary>
    public required List<WeekInfoDto> CalculatedWeeks { get; init; }
    
    /// <summary>هفته‌های محاسبه نشده (از جدیدترین به قدیمی‌ترین)</summary>
    public required List<WeekInfoDto> PendingWeeks { get; init; }
    
    /// <summary>هفته‌های آینده قابل انتخاب</summary>
    public required List<WeekInfoDto> FutureWeeks { get; init; }
}

public class WeekInfoDto
{
    /// <summary>شناسه یکتای هفته</summary>
    public required long WeekDefinitionId { get; init; }
    
    /// <summary>شماره هفته (YYYY-Www)</summary>
    public required string DisplayName { get; init; }
    
    /// <summary>تاریخ شروع هفته</summary>
    public required DateTime StartDate { get; init; }
    
    /// <summary>تاریخ پایان هفته</summary>
    public required DateTime EndDate { get; init; }
    
    /// <summary>آیا محاسبه شده؟</summary>
    public bool IsCalculated { get; init; }
    
    /// <summary>تاریخ محاسبه (اگر محاسبه شده باشد)</summary>
    public DateTime? CalculatedAt { get; init; }
    
    /// <summary>وضعیت اجرای آخرین محاسبه</summary>
    public string? LastExecutionStatus { get; init; }
    
    /// <summary>مبلغ کل استخر کمیسیون (اگر محاسبه شده باشد)</summary>
    public long? TotalPoolAmount { get; init; }
    
    /// <summary>تعداد کاربران واجد شرایط</summary>
    public int? EligibleUsersCount { get; init; }
    
    /// <summary>نمایش فارسی (برای UI)</summary>
    public required string DisplayText { get; init; }
}
