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

namespace SolutionErp.Domain.Office;

// Phase 10.3 G-O3 (Mig 38 — S37) — Ý kiến cấp duyệt V2 dynamic cho Proposal.
// Cookie-cutter mirror PurchaseEvaluationLevelOpinion (Mig 26).
//
// Mỗi row = 1 (Proposal × 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 (ProposalId, LevelId) — 1 row / level / proposal.
// FK Cascade Proposal (wipe khi xoá) + Restrict Level (admin xoá Level chặn).
// SignedByUserId track actor thật (có thể Admin override) + denorm FullName.
public class ProposalLevelOpinion : AuditableEntity
{
    public Guid ProposalId { 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 Proposal? Proposal { get; set; }
    public ApprovalWorkflowLevel? Level { get; set; }
}
