using SolutionErp.Domain.Common;

namespace SolutionErp.Domain.ContractSigningPlans;

// 🔴 Bắt đầu từ 1 (0 falsy JS); `Other = 99` khuôn PurchaseEvaluationAttachmentPurpose.
// Append-only khi cần thêm mục đích mới.
public enum ContractSigningPlanAttachmentPurpose
{
    DossierScan = 1,      // Bản scan căn cứ (mẫu vật liệu / shopdrawing / kết quả TVGS)
    PlanDocument = 2,     // Bản kế hoạch ký kết đã ký/xuất
    // [S171 BE-7 — owner chốt 2026-08-04] File người DUYỆT đính kèm lúc bấm Duyệt/Trả lại/Từ chối
    // (panel 3 mục 5 của Ảnh 2). APPEND-ONLY đúng luật dòng trên: KHÔNG đánh số lại `Other = 99`
    // — Purpose lưu là int trong DB, đổi số cũ = viết lại nghĩa của hàng đã có.
    ApprovalAttachment = 3,
    Other = 99,
}

// [W1 Mig 69 — S161] File đính kèm phiếu Kế hoạch ký kết.
// FK Cascade Plan (1 đường cascade DUY NHẤT). `ContractSigningPlanDossierItemId`
// optional = loose-Guid + index, CỐ Ý KHÔNG FK vật lý — khuôn
// `PurchaseEvaluationAttachment.PurchaseEvaluationSupplierId` (config chỉ HasIndex).
// Lý do kỹ thuật: Plan→DossierItem→Attachment + Plan→Attachment cùng Cascade sẽ là
// MULTIPLE CASCADE PATHS ⇒ SQL Server từ chối tạo bảng.
// Khuôn ProposalAttachment.cs + PurchaseEvaluationAttachment.cs.
public class ContractSigningPlanAttachment : AuditableEntity
{
    public Guid ContractSigningPlanId { get; set; }
    public Guid? ContractSigningPlanDossierItemId { get; set; }

    public string FileName { get; set; } = string.Empty;
    public string StoragePath { get; set; } = string.Empty;
    public long FileSize { get; set; }
    public string ContentType { get; set; } = string.Empty;
    public ContractSigningPlanAttachmentPurpose Purpose { get; set; } = ContractSigningPlanAttachmentPurpose.Other;
    public string? Note { get; set; }

    public ContractSigningPlan? ContractSigningPlan { get; set; }
}
