namespace MarketingDAL.DTO.Persona;
///
/// MarketMind AI master data — a buyer Persona (MPERSONA), attached to a Segment and optionally
/// specialized to one ICP. Parent of NDPHypothesis and EmotionalDriver rows.
///
public class PersonaDTO
{
#region Persona
public int PersonaId { get; set; }
public string PersonaCode { get; set; } = string.Empty;
public string PersonaName { get; set; } = string.Empty;
public int SegmentId { get; set; }
public string? SegmentCode { get; set; }
public string? SegmentName { get; set; }
///
/// Optional FK to MICP. Per CLAUDE-DB-SCHEMA.md's "optional FK" convention this is never NULL
/// in the DB — it defaults to -1 ("not applicable") when a Persona is defined at the Segment
/// level without a specific ICP, the same sentinel convention LeadDTO uses for OUId/PartyId/etc.
/// (deliberately NOT a nullable int, despite the brief's "nullable FK" wording, to match this
/// repo's real DDL convention rather than introduce a NULLable optional-FK column).
///
public int ICPId { get; set; } = -1;
public string? ICPCode { get; set; }
public string? ICPName { get; set; }
public string? Demographics { get; set; }
public string? RoleContext { get; set; }
/// Free text — e.g. "Decision Maker" / "Influencer" / "User". Not enumerated: real-world
/// job titles and buying-committee roles vary too much for a fixed enum.
public string? DecisionAuthority { get; set; }
public string? PainPoints { get; set; }
public string? Motivations { get; set; }
#endregion
#region Base
public int CreatedById { get; set; }
public DateTime CreatedOn { get; set; }
public string? CreatedByName { get; set; }
public int ModifiedById { get; set; }
public DateTime ModifiedOn { get; set; }
public string? ModifiedByName { get; set; }
#endregion
#region Standard
public short SortOrder { get; set; }
public byte Status { get; set; }
public short Version { get; set; }
public int TenantId { get; set; }
#endregion
}