using System;
namespace EAIAdminDAL.DTO
{
/// Admin CRUD DTO for MEAIPROMPTTEMPLATE — mirrors gbEAI's maiprompttemplate. See
/// EAIInitiativeAdminDTO for the shared shape/conventions this follows.
public class EAIPromptTemplateAdminDTO
{
public int PromptId { get; set; }
public int TenantId { get; set; }
/// Uniqueness is per (TenantId, InitiativeCode, CapabilityCode) — NOT globally
/// unique like Initiative/Capability/Bot/AgentRoute codes, matching gbEAI's own
/// maiprompttemplate lookup key shape.
public string InitiativeCode { get; set; } = string.Empty;
public string CapabilityCode { get; set; } = string.Empty;
public string PromptTemplate { get; set; } = string.Empty;
/// Optional per-report/per-flow prompt granularity — e.g. MREPORT.ReportCode for
/// report-driven calls, GopFlowCode for flow-driven calls. Null = the capability-wide
/// default/fallback row (at most one per Tenant+Initiative+Capability); a non-null value
/// creates a variant row resolved in preference to the default when present (see
/// prompt_resolver.py's variant_code fallback). Immutable once created — same rationale as
/// InitiativeCode/CapabilityCode.
public string? VariantCode { get; set; }
/// Read-only, server-computed — refreshed from gbEAI's push response after every
/// successful sync (gbEAI bumps its own version on every update). Never client-set; the
/// BLL ignores whatever value arrives on the wire and always uses the sync result's value.
public int PromptVersion { get; set; } = 1;
public long? EAIRemoteId { get; set; }
public short Version { get; set; }
public byte Status { get; set; } = 1;
public int? CreatedById { get; set; }
public string? CreatedByName { get; set; }
public DateTime CreatedOn { get; set; }
public int? ModifiedById { get; set; }
public string? ModifiedByName { get; set; }
public DateTime? ModifiedOn { get; set; }
}
}