namespace KArtSell.Modules.ModelOperations.Domain.ApprovalWorkflow;

public enum ApprovalStatus { Draft, Proposed, Approved, Active, Rejected }

public class ApprovalProposal
{
    public Guid Id { get; set; }
    public Guid ModelId { get; set; }
    public ApprovalStatus Status { get; set; }
    public required string CreatedBy { get; set; }
    public DateTime CreatedAt { get; set; }
    public required string Justification { get; set; }
    public DateOnly EffectiveAt { get; set; }
    public DateTime? ProposedAt { get; set; }
    public string? ApprovedBy { get; set; }
    public DateTime? ApprovedAt { get; set; }
    public string? ApprovalNotes { get; set; }
    public string? ActivatedBy { get; set; }
    public DateTime? ActivatedAt { get; set; }
    public DateTime PublishedAt { get; set; }
    public int Revision { get; set; }
    public Guid CorrelationId { get; set; }

    public List<ApprovalEvidence> Evidence { get; set; } = new();
    public List<ApprovalEvent> Events { get; set; } = new();
}

public class ApprovalEvidence
{
    public Guid Id { get; set; }
    public Guid ApprovalProposalId { get; set; }
    public required string EvidenceType { get; set; }
    public required string EvidenceUrl { get; set; }
    public string? ReviewerComment { get; set; }
    public DateTime PublishedAt { get; set; }
    public Guid CorrelationId { get; set; }
}

public class ApprovalEvent
{
    public Guid Id { get; set; }
    public Guid ApprovalProposalId { get; set; }
    public required string EventType { get; set; }
    public required string ActorEmail { get; set; }
    public DateTime EventAt { get; set; }
    public Dictionary<string, object>? Details { get; set; }
    public DateTime PublishedAt { get; set; }
    public Guid CorrelationId { get; set; }
}
