using CMSMicroservice.Domain.Common;

namespace CMSMicroservice.Domain.Entities.Commission;

/// <summary>
/// لاگ اجرای Worker برای مانیتورینگ
/// </summary>
public class WorkerExecutionLog : BaseAuditableEntity
{
    /// <summary>
    /// شناسه یکتا برای هر اجرا (Correlation ID)
    /// </summary>
    public Guid ExecutionId { get; set; }

 

    /// <summary>
    /// شناسه تعریف هفته (کلید خارجی به WeekDefinition)
    /// </summary>
    public long WeekDefinitionId { get; set; }

    /// <summary>
    /// WeekDefinition Navigation Property
    /// </summary>
    public virtual WeekDefinition WeekDefinition { get; set; }

    /// <summary>
    /// زمان شروع اجرا
    /// </summary>
    public DateTime StartedAt { get; set; }

    /// <summary>
    /// زمان اتمام اجرا
    /// </summary>
    public DateTime? CompletedAt { get; set; }

    /// <summary>
    /// مدت زمان اجرا (میلی‌ثانیه)
    /// </summary>
    public long? DurationMs { get; set; }

    /// <summary>
    /// وضعیت اجرا
    /// </summary>
    public WorkerExecutionStatus Status { get; set; }

    /// <summary>
    /// تعداد تراکنش‌های پردازش شده
    /// </summary>
    public int ProcessedCount { get; set; }

    /// <summary>
    /// تعداد خطاها
    /// </summary>
    public int ErrorCount { get; set; }

    /// <summary>
    /// پیام خطا (در صورت وجود)
    /// </summary>
    public string? ErrorMessage { get; set; }

    /// <summary>
    /// Stack trace خطا
    /// </summary>
    public string? ErrorStackTrace { get; set; }

    /// <summary>
    /// جزئیات اضافی (JSON)
    /// </summary>
    public string? Details { get; set; }
}

/// <summary>
/// وضعیت اجرای Worker
/// </summary>
public enum WorkerExecutionStatus
{
    /// <summary>
    /// در حال اجرا
    /// </summary>
    Running = 0,

    /// <summary>
    /// موفق
    /// </summary>
    Success = 1,

    /// <summary>
    /// با خطا مواجه شد
    /// </summary>
    Failed = 2,

    /// <summary>
    /// کنسل شد
    /// </summary>
    Cancelled = 3,

    /// <summary>
    /// موفق با هشدار
    /// </summary>
    SuccessWithWarnings = 4
}
