using Microsoft.AspNetCore.Identity;

namespace SolutionErp.Domain.Identity;

public class User : IdentityUser<Guid>
{
    public string FullName { get; set; } = string.Empty;
    public string? RefreshToken { get; set; }
    public DateTime? RefreshTokenExpiresAt { get; set; }
    public bool IsActive { get; set; } = true;
    public DateTime CreatedAt { get; set; }
    public DateTime? UpdatedAt { get; set; }

    // Org chart — user thuộc 1 phòng ban + chức vụ (free text). Nullable
    // cho admin/system user không thuộc dept cụ thể.
    public Guid? DepartmentId { get; set; }
    public string? Position { get; set; }                   // vd "Trưởng phòng CCM", "QS công trường", "Phó GĐ"

    // 2-stage department approval (Phase 9 — Migration 16): khi true, NV
    // được quyền duyệt thay TPB (skip Stage Review, đẩy thẳng Stage Confirm).
    // Cũng dùng cho N-stage inner step (Mig 18) — TP có CanBypassReview
    // skip NV+PP cùng Department.
    // Mặc định false (an toàn). Admin set ở UserManager UI.
    public bool CanBypassReview { get; set; }

    // Cấp chức danh trong phòng — phục vụ N-stage workflow inner step (Mig 18).
    // Mỗi inner step yêu cầu user khớp DepartmentId + PositionLevel mới duyệt
    // được sub-step đó. Null cho admin/system/external user.
    public PositionLevel? PositionLevel { get; set; }

    // Mig 31 (S23 t1 Plan K Chunk A) — F2 semantic + storage REFACTOR:
    // Drafter-skip-from-Nháp (cũ Mig 29) → Approver-skip-during-ChoDuyet (mới).
    // Cờ chuyển sang `ApprovalWorkflowLevels.AllowApproverSkipToFinal` per-slot
    // Approver (mirror F3+F4 admin opt-in per-Approver pattern). NO BACKFILL —
    // 4 prod user accept lose value per bro Option A, admin re-config qua Designer.
}
