namespace MarketingDAL.DTO.CustomerProductMatrixCell;
///
/// MarketMind AI execution layer — a CustomerProductMatrixCell (MCUSTPRODMATRIXCELL): the "one
/// page business model" synthesis table, one row per (ABCDCategory, ProductLabel) intersection.
/// and are validated in
/// CustomerProductMatrixCellBLL against ICPBLL.ComputeABCDCategory's and
/// ProductBLL.ComputeProductLabel's exact derived string sets (not re-declared as byte enums —
/// per this task's brief, these must match those two BLLs' output strings verbatim).
/// is NOT a stored column — see
/// CustomerProductMatrixCellBLL.GetCustomerProductMatrixCell for how it's computed on read from
/// the tenant's current BusinessAspirationGoal (null if none exists yet).
///
public class CustomerProductMatrixCellDTO
{
#region CustomerProductMatrixCell
public int CustomerProductMatrixCellId { get; set; }
public string CellCode { get; set; } = string.Empty;
public string CellName { get; set; } = string.Empty;
/// Must be one of: Amazing, Breadwinning, Convenience, Dangerous (ICPBLL.ComputeABCDCategory's output set).
public string ABCDCategory { get; set; } = string.Empty;
/// Must be one of: Easy-to-Buy, Primary, High-Value, Time-Waster (ProductBLL.ComputeProductLabel's output set).
public string ProductLabel { get; set; } = string.Empty;
public decimal RevenueTargetPercent { get; set; }
public string? Remarks { get; set; }
///
/// Computed, read-only, NOT persisted — RevenueTargetPercent / 100 * the tenant's current
/// BusinessAspirationGoal.AnnualRevenueTarget. Null when no BusinessAspirationGoal row exists
/// yet (never throws for that case). Populated only by GetCustomerProductMatrixCell's read
/// path — always null immediately after Save/Update since those don't recompute it.
///
public decimal? RevenueTargetAmount { 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
}