using SolutionErp.Domain.ApprovalWorkflowsV2;
using SolutionErp.Domain.Common;

namespace SolutionErp.Domain.Office;

// Phase 11 P11-A (Mig 41) — Ý kiến cấp duyệt V2 dynamic cho LeaveRequest.
// Cookie-cutter mirror ProposalLevelOpinion (Mig 38).
//
// Mỗi row = 1 (LeaveRequest × ApprovalWorkflowLevel). Service ApproveV2Async sau
// khi approve thành công Cấp hiện tại sẽ UPSERT row này (latest-write-wins).
// Reject (TraLai/TuChoi) KHÔNG sync.
//
// UNIQUE composite (LeaveRequestId, ApprovalWorkflowLevelId) — 1 row / level / đơn.
// FK Cascade LeaveRequest (wipe khi xoá) + Restrict Level (admin xoá Level chặn).
// SignedByUserId track actor thật (có thể Admin override) + denorm FullName.
public class LeaveRequestLevelOpinion : AuditableEntity
{
    public Guid LeaveRequestId { get; set; }
    public Guid ApprovalWorkflowLevelId { get; set; }

    public string? Comment { get; set; }                 // max 2000 hoặc placeholder
    public DateTime SignedAt { get; set; }
    public Guid SignedByUserId { get; set; }             // người ký thực sự (có thể Admin thay)
    public string SignedByFullName { get; set; } = string.Empty;  // snapshot denorm

    public LeaveRequest? LeaveRequest { get; set; }
    public ApprovalWorkflowLevel? Level { get; set; }
}
