let asset_kind_type = [|
  'Logo,
  'Icon,
  'Diagram,
  'Screenshot,
  'Video,
  'Document,
|] in

let template_kind_type = [|
  'ModeStep,
  'AgentPrompt,
  'PublicationCard,
  'ContentSection,
|] in

# A publishable asset: image, video, or document attached to a project.
# variants: alternative formats (e.g. "svg", "png@2x", "dark").
# publish_to: service ids from manifest.publication_services where this asset is deployed.
let content_asset_type = {
  id          | String,
  kind        | asset_kind_type,
  source_path | String,
  variants    | Array String | default = [],
  publish_to  | Array String | default = [],
  description | String       | default = "",
} in

# A reusable Nickel template parameterised by named inputs.
# source_path: .ncl file that evaluates to the template function.
# parameters: declared input names the template accepts.
let content_template_type = {
  id          | String,
  kind        | template_kind_type,
  source_path | String,
  parameters  | Array String | default = [],
  description | String       | default = "",
} in

{
  AssetKind        = asset_kind_type,
  TemplateKind     = template_kind_type,
  ContentAsset     = content_asset_type,
  ContentTemplate  = content_template_type,
}
