using SolutionErp.Domain.Common;

namespace SolutionErp.Domain.ContractSigningPlans;

// [W1 Mig 69 — S161] Loại căn cứ (mục b.8-9 tờ FO-002.01).
// 🔴 Bắt đầu từ 1 — 0 falsy trong JS. `Khac = 99` theo khuôn `ItTicketCategory.Other = 99`.
public enum DossierItemKind
{
    MauVatLieu = 1,      // Mẫu vật liệu trình TVGS
    Shopdrawing = 2,     // Bản vẽ shopdrawing
    Khac = 99,
}

// [W1 Mig 69 — S161] Trạng thái 1 căn cứ.
// 🔴 ChuaNop = 1 (KHÔNG 0): mọi enum repo bắt đầu ở 1 (`Office/Enums.cs:9,19,31,41,50,58`;
// `ApprovalWorkflow.cs:55`) và 0 là falsy JS ⇒ `status ? A : B` / `?status=0` rơi im lặng ở FE.
public enum DossierItemStatus
{
    ChuaNop = 1,
    DaNop = 2,
    TvgsDuyet = 3,
    TvgsBac = 4,
}

// [W1 Mig 69 — S161] Danh mục căn cứ kèm kế hoạch ký kết — INPUT của con số đang duyệt.
// CRUD chỉ mở ở phase {DangSoanThao, TraLai} (W2).
public class ContractSigningPlanDossierItem : AuditableEntity
{
    public Guid ContractSigningPlanId { get; set; }

    public DossierItemKind Kind { get; set; } = DossierItemKind.Khac;
    public Guid? SupplierId { get; set; }              // loose-Guid — căn cứ gắn NCC nào (null = chung)
    public string Name { get; set; } = string.Empty;   // "Mẫu thép D10 Hoà Phát"
    public DossierItemStatus Status { get; set; } = DossierItemStatus.ChuaNop;

    public string? TvgsName { get; set; }              // tên TVGS xử lý
    public DateTime? TvgsResultAt { get; set; }        // ngày TVGS duyệt/bác
    public string? Note { get; set; }

    public ContractSigningPlan? ContractSigningPlan { get; set; }
}
