---
about:
  description: Nimbus Feature Manifest for Android
  kotlin:
    package: mozilla.components.service.nimbus
    class: .messaging.FxNimbusMessaging
channels:
  - release
  - debug
features:
  nimbus-system:
    description: |
      Configuration of the Nimbus System in Android.
    variables:
      refresh-interval-foreground:
        description: |
          The minimum interval in minutes between fetching experiment 
          recipes in the foreground.
        type: Int
        default: 60 # 1 hour

  messaging:
    description: |
      Configuration for the messaging system.

      In practice this is a set of growable lookup tables for the
      message controller to piece together.

    variables:
      message-under-experiment:
        description: Id or prefix of the message under experiment.
        type: Option<String>
        default: null

      messages:
        description: A growable collection of messages
        type: Map<String, MessageData>
        default: {}

      triggers:
        description: >
          A collection of out the box trigger
          expressions. Each entry maps to a
          valid JEXL expression.
        type: Map<String, String>
        default: {}
      styles:
        description: >
          A map of styles to configure message
          appearance.
        type: Map<String, StyleData>
        default: {}

      actions:
        type: Map<String, String>
        description: A growable map of action URLs.
        default: {}
      on-control:
        type: ControlMessageBehavior
        description: What should be displayed when a control message is selected.
        default: show-next-message
      notification-config:
        description: Configuration of the notification worker for all notification messages.
        type: NotificationConfig
        default: {}
    defaults:

objects:
  MessageData:
    description: >
      An object to describe a message. It uses human
      readable strings to describe the triggers, action and
      style of the message as well as the text of the message
      and call to action.
    fields:
      action:
        type: Text
        description: >
          A URL of a page or a deeplink.
          This may have substitution variables in.
        # This should never be defaulted.
        default: ""
      title:
        type: Option<Text>
        description: "The title text displayed to the user"
        default: null
      text:
        type: Text
        description: "The message text displayed to the user"
        # This should never be defaulted.
        default: ""
      is-control:
        type: Boolean
        description: "Indicates if this message is the control message, if true shouldn't be displayed"
        default: false
      button-label:
        type: Option<Text>
        description: >
          The text on the button. If no text
          is present, the whole message is clickable.
        default: null
      style:
        type: String
        description: >
          The style as described in a
          `StyleData` from the styles table.
        default: DEFAULT
      surface:
        description:
          The surface identifier for this message.
        type: String
        default: homescreen
      trigger:
        type: List<String>
        description: >
          A list of strings corresponding to
          targeting expressions. The message will be
          shown if all expressions `true`.
        default: []
  StyleData:
    description: >
      A group of properties (predominantly visual) to
      describe the style of the message.
    fields:
      priority:
        type: Int
        description: >
          The importance of this message.
          0 is not very important, 100 is very important.
        default: 50
      max-display-count:
        type: Int
        description: >
          How many sessions will this message be shown to the user
          before it is expired.
        default: 5
  NotificationConfig:
    description: Attributes controlling the global configuration of notification messages.
    fields:
      refresh-interval:
        type: Int
        description: >
          How often, in minutes, the notification message worker will wake up and check for new
          messages.
        default: 240 # 4 hours

enums:
  ControlMessageBehavior:
    description: An enum to influence what should be displayed when a control message is selected.
    variants:
      show-next-message:
        description: The next eligible message should be shown.
      show-none:
        description: The surface should show no message.
