using SolutionErp.Domain.Common;

namespace SolutionErp.Domain.Office;

// Phase 10.3 G-O3 (Mig 38 — S37 2026-05-28) — Đề xuất (Proposal) aggregate root.
// Mirror PE Plan B Mig 22-26 pattern cookie-cutter: Workflow V2 dynamic (ApplicableType=4) +
// LevelOpinions UPSERT auto via ApproveV2Async + atomic CodeGen DX/YYYY/NNN.
// Reference: PurchaseEvaluation.cs (PE module flagship V2 mirror source).
public class Proposal : AuditableEntity
{
    public string? MaDeXuat { get; set; }                    // Auto-gen "DX/YYYY/NNN" qua ProposalCodeSequence

    public string Title { get; set; } = string.Empty;        // "Đề xuất mua máy tính", "Đề xuất tăng ngân sách"
    public string? Description { get; set; }                 // Nội dung chi tiết (max 5000)

    // Tổng số tiền dự kiến (đ). Optional — có đề xuất không số tiền (vd policy).
    public decimal? AmountEstimate { get; set; }

    public ProposalStatus Status { get; set; } = ProposalStatus.Nhap;

    public Guid? DepartmentId { get; set; }                  // Phòng ban đề xuất (org filter)
    public Guid DrafterUserId { get; set; }                  // User tạo đề xuất

    // Workflow V2 pin (cookie-cutter PE Mig 22-23-24).
    // ApplicableType phải = ProposalGeneral=4 (Mig 37 enum extend).
    public Guid? ApprovalWorkflowId { get; set; }
    public int? CurrentApprovalLevelOrder { get; set; }      // Cấp đang chờ (1-based) khi DaGuiDuyet

    // SLA (mirror PE)
    public DateTime? SlaDeadline { get; set; }
    public bool SlaWarningSent { get; set; }

    // Smart reject (mirror PE Mig 16)
    public ProposalStatus? RejectedFromStatus { get; set; }

    public List<ProposalAttachment> Attachments { get; set; } = new();
    public List<ProposalLevelOpinion> LevelOpinions { get; set; } = new();
}
