using Fitness_core_BE.Models; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; using System.Collections.Generic; namespace Fitness_core_BE.Models { public class Customer { [Key] public Guid CusId { get; set; } public string? CusName { get; set; } public string? PushTokenId { get; set; } // Points at a UserDocument uploaded via POST /customer/documents. No EF relationship // is configured (kept as a plain id) since we only ever need the id itself here — the // mobile app builds the display URL client-side via docService/{id}. public int? FKProfileImageDocId { get; set; } public string? Gender { get; set; } public DateOnly? BoD { get; set; } public string? PrimaryPH { get; set; } public bool IsPrimaryPHVerfied { get; set; } = false; public string? SecondaryPH { get; set; } public bool IsSecondaryPHVerfied { get; set; } = false; public string? Email { get; set; } public bool IsEmailVerfied { get; set; } = false; public string? NIC { get; set; } public string? Address { get; set; } public Guid FKUserId { get; set; } [ForeignKey("FKUserId")] public virtual User User { get; set; } public bool IsActive { get; set; } = true; public DateTime CreatedAt { get; set; } = DateTime.UtcNow; // Legacy single-gym lock mirror. New physical-access decisions are stored on the // tenant-scoped AccessProfile so one customer can have different access state at // different gyms. public bool IsLocked { get; set; } = false; public string? LockReason { get; set; } // "Manual" | "Overdue" public DateTime? LockedAt { get; set; } public virtual ICollection CustomerWorkouts { get; set; } public virtual ICollection CustomerMeals { get; set; } public virtual ICollection CustomerTargets { get; set; } public virtual ICollection CustomerSubscriptions { get; set; } } }