using SolutionErp.Domain.Common;

namespace SolutionErp.Domain.Master;

public class Supplier : AuditableEntity
{
    public string Code { get; set; } = string.Empty;         // Mã NCC (viết tắt, dùng trong mã HĐ)
    public string Name { get; set; } = string.Empty;         // Tên công ty đầy đủ
    public SupplierType Type { get; set; }
    public string? TaxCode { get; set; }                     // Mã số thuế
    public string? Phone { get; set; }
    public string? Email { get; set; }
    public string? Address { get; set; }                     // Địa chỉ xuất HĐ (đăng ký)
    public string? ContactPerson { get; set; }               // Người liên hệ chính
    public string? Note { get; set; }                        // Ghi chú / lý do blacklist

    // ---- S? go-live expansion (18 field bổ sung, tất cả nullable — import Excel "Database NCC") ----
    public string? PackageCategory { get; set; }             // Gói thầu (free-text)
    public string? OfficeAddress { get; set; }               // Địa chỉ văn phòng
    public string? MailingAddress { get; set; }              // Địa chỉ gửi thư
    public string? Fax { get; set; }
    public string? BankAccount { get; set; }                 // Số TK + tên + CN ngân hàng (composite raw)
    public string? SecondaryBankAccount { get; set; }        // Số TK phụ
    public string? LegalRepresentative { get; set; }         // Người đại diện pháp luật
    public string? LegalRepTitle { get; set; }               // Chức vụ đại diện
    public string? AuthorizationNote { get; set; }           // Giấy ủy quyền (free text)
    public string? LinkGuq { get; set; }                     // Link GUQ (NAS path)
    public string? LinkGpkd { get; set; }                    // Link GPKD (NAS path)
    public string? LinkHsnl { get; set; }                    // Link HSNL (NAS path)
    public string? ContactTitle { get; set; }                // Chức vụ người liên hệ
    public string? ContactPhone { get; set; }                // SĐT chính (người liên hệ)
    public string? MailRecipient { get; set; }               // Người nhận thư / SĐT (composite raw)
    public string? ReferralSource { get; set; }              // Nguồn giới thiệu
    public string? OwnerPmh { get; set; }                    // Người phụ trách (PMH)
    public SupplierStatus? Status { get; set; }              // Tình trạng hiện tại (nullable = chưa phân loại)

    // ---- Import provenance (Supplier Phase B — Upload Excel "Database NCC") ----
    // Nguồn cập nhật từ file Excel gốc (cột 29-30), KHÁC audit CreatedAt/UpdatedBy (do hệ thống set).
    public DateTime? SourceUpdatedAt { get; set; }           // "NGÀY CẬP NHẬT CUỐI" trên file Excel nguồn
    public string? SourceUpdatedBy { get; set; }             // "NGƯỜI CẬP NHẬT" trên file Excel nguồn

    // ---- Publish state (Supplier import v2, Mig 64 — S113) ----
    // Cổng công bố: NCC nhập từ import thiếu Mã NCC → lưu NHÁP (IsPublic=false, ẩn khỏi picker).
    // Publish qua PublishSupplierCommand (gate Code non-empty). KHÁC SupplierStatus (business-status c27).
    public bool IsPublic { get; set; }                       // default false; backfill prod = true (Mig 64)
}
