using SolutionErp.Domain.Common;

namespace SolutionErp.Domain.PurchaseEvaluations;

// [S61 2026-06-12] Ngân sách gói thầu theo cặp (Dự án, Hạng mục công việc) —
// thay module Budget cũ (5 bảng, xóa cùng Mig 50). 1 record DUY NHẤT per cặp
// (UNIQUE composite filtered [IsDeleted] = 0 — gotcha #57), mọi phiếu PE cùng
// cặp dùng chung. Auto-create khi tạo phiếu PE đầu tiên của cặp.
//
// Loose-Guid convention PE (giống PE.ProjectId/WorkItemId/SelectedSupplierId):
// KHÔNG FK vật lý, KHÔNG navigation property.
//
// [S76 — anh Kiệt FDC] Form ngân sách MA TRẬN 3 cột (DỰ ÁN | PRO | CCM), mỗi
// phòng nhập + điều chỉnh ngân sách của CHÍNH cột phòng đó (quyền theo ROLE):
//   - PRO (Procurement | Admin): ProInitialAmount (ban hành lần đầu) +
//     ProAdjustmentAmount (V0/hiệu chỉnh — cho phép ÂM) + ProNote.
//   - CCM (CostControl | Admin): InitialAmount (ban hành lần đầu) +
//     AdjustmentAmount (V0/hiệu chỉnh — cho phép ÂM) + CcmNote.
//   - DỰ ÁN: hiển thị FE-only (chưa wire BE — sau mới có người dự án nhập).
//
// "Ngân sách full" mỗi cột = Initial + Adjustment (cột đó). Authoritative full
// (Block B công thức) = CCM nếu CCM đã nhập, else PRO (fullIsEstimate=true → FE
// badge "ngân sách PRO"). ProEstimateAmount = LEGACY single-estimate (≤S75) —
// Mig 56 migrate → ProInitialAmount, FE KHÔNG dùng nữa; giữ cột back-compat.
public class PeWorkItemBudget : AuditableEntity
{
    public Guid ProjectId { get; set; }                  // loose-Guid Projects.Id
    public Guid WorkItemId { get; set; }                 // loose-Guid WorkItems.Id

    public decimal? ProEstimateAmount { get; set; }      // [LEGACY ≤S75] PRO dự trù 1 số — Mig 56 migrate → ProInitialAmount
    public decimal? ProInitialAmount { get; set; }       // [S76] PRO "Ban hành lần đầu" (đ)
    public decimal? ProAdjustmentAmount { get; set; }    // [S76] PRO "V0/hiệu chỉnh tăng giảm" (đ, cho phép ÂM)
    public string? ProNote { get; set; }                 // "Ghi chú từ PRO"
    public decimal? InitialAmount { get; set; }          // CCM "Ngân sách Ban hành lần đầu" (đ)
    public decimal? AdjustmentAmount { get; set; }       // CCM "NS V0/hiệu chỉnh tăng giảm" (đ, cho phép ÂM)
    public string? CcmNote { get; set; }                 // [Mig 55] "Ghi chú từ CCM" — CCM ghi lý do/nguồn số (mirror ProNote)
}
