using SolutionErp.Domain.Common;

namespace SolutionErp.Domain.Contracts;

// Audit log thống nhất cho mọi thay đổi liên quan HĐ — Header / Details /
// Workflow transition / Comment / Attachment. Khác `ContractApprovals` (chỉ
// log workflow transitions, dùng cho guard logic) — Changelog là VIEW LAYER
// cho user đọc lịch sử thao tác.
//
// Populate qua MediatR `AuditBehavior` interceptor — auto từ Insert/Update/
// Delete commands trên Contract + Details (xem Application/Common/Behaviors/
// AuditBehavior.cs).
public class ContractChangelog : BaseEntity
{
    public Guid ContractId { get; set; }
    public Contract? Contract { get; set; }

    public ChangelogEntityType EntityType { get; set; }   // Contract | Detail | Workflow | Comment | Attachment
    public Guid? EntityId { get; set; }                   // PK của child entity (null nếu là Contract header)
    public ChangelogAction Action { get; set; }           // Insert | Update | Delete | Transition
    public ContractPhase? PhaseAtChange { get; set; }     // Snapshot phase tại thời điểm change
    public Guid? UserId { get; set; }                     // Null = system (vd SLA auto-approve)
    public string? UserName { get; set; }                 // Denormalize cho log readable
    public string? Summary { get; set; }                  // Human-readable: "Đổi giá trị 100M → 150M"
    public string? FieldChangesJson { get; set; }         // JSON [{Field, OldValue, NewValue}] cho update
    public string? ContextNote { get; set; }              // Comment khi user kèm theo thay đổi
}

public enum ChangelogEntityType
{
    Contract = 1,
    Detail = 2,
    Workflow = 3,
    Comment = 4,
    Attachment = 5,
}

public enum ChangelogAction
{
    Insert = 1,
    Update = 2,
    Delete = 3,
    Transition = 4,                                       // Riêng cho workflow phase change
}
