components:
  schemas:
    notificationId:
      type: string
      description: The ID of the notification.
      example: notification-settings
      # This is using a value of `notification-settings`, not a UUID. Need to investigate
      #format: uuid
      #example: e4bb1afb-4a4f-4dd6-8be0-e615d233185b
    appriseApiUrl:
      type: string
      nullable: true
      description: The full URL where the Apprise API to use is located.
    maxFailedAttempts:
      type: integer
      minimum: 0
      default: 5
      description: The maximum number of times a notification fails before being disabled.
    maxNotificationQueue:
      type: integer
      description: The maximum number of notifications in the notification queue before events are ignored.
    notificationEventName:
      type: string
      description: The name of the event the notification will fire on.
      enum: ['onPodcastEpisodeDownloaded', 'onTest']
    urls:
      type: array
      items:
        type: string
      description: The Apprise URLs to use for the notification.
      example: http://192.168.0.3:8000/notify/my-cool-notification
    titleTemplate:
      type: string
      description: The template for the notification title.
      example: 'New {{podcastTitle}} Episode!'
    bodyTemplate:
      type: string
      description: The template for the notification body.
      example: '{{episodeTitle}} has been added to {{libraryName}} library.'
    enabled:
      type: boolean
      default: false
      description: Whether the notification is enabled.
    notificationType:
      type: string
      enum: ['info', 'success', 'warning', 'failure']
      nullable: true
      default: 'info'
      description: The notification's type.
    Notification:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/notificationId'
        libraryId:
          $ref: './Library.yaml#/components/schemas/libraryIdNullable'
        eventName:
          $ref: '#/components/schemas/notificationEventName'
        urls:
          $ref: '#/components/schemas/urls'
        titleTemplate:
          $ref: '#/components/schemas/titleTemplate'
        bodyTemplate:
          $ref: '#/components/schemas/bodyTemplate'
        enabled:
          $ref: '#/components/schemas/enabled'
        type:
          $ref: '#/components/schemas/notificationType'
        lastFiredAt:
          type: integer
          nullable: true
          description: The time (in ms since POSIX epoch) when the notification was last fired. Will be null if the notification has not fired.
        lastAttemptFailed:
          type: boolean
          description: Whether the last notification attempt failed.
        numConsecutiveFailedAttempts:
          type: integer
          description: The number of consecutive times the notification has failed.
          default: 0
        numTimesFired:
          type: integer
          description: The number of times the notification has fired.
          default: 0
        createdAt:
          $ref: '../schemas.yaml#/components/schemas/createdAt'
    NotificationEvent:
      type: object
      properties:
        name:
          type: string
          description: The name of the notification event. The names and allowable values are defined at https://github.com/advplyr/audiobookshelf/blob/master/server/utils/notifications.js
        requiresLibrary:
          type: boolean
          description: Whether the notification event depends on a library existing.
        libraryMediaType:
          type: string
          description: The type of media of the library the notification depends on existing. Will not exist if requiresLibrary is false.
          nullable: true
        description:
          type: string
          description: The description of the notification event.
        variables:
          type: array
          items:
            type: string
          description: The variables of the notification event that can be used in the notification templates.
        defaults:
          type: object
          properties:
            title:
              type: string
              description: The default title template for notifications using the notification event.
            body:
              type: string
              description: The default body template for notifications using the notification event.
        testData:
          type: object
          description: The keys of the testData object will match the list of variables. The values will be the data used when sending a test notification.
          additionalProperties:
            type: string
    NotificationSettings:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/notificationId'
        appriseType:
          type: string
          description: The type of Apprise that will be used. At the moment, only api is available.
        appriseApiUrl:
          $ref: '#/components/schemas/appriseApiUrl'
        notifications:
          type: array
          items:
            $ref: '#/components/schemas/Notification'
          description: The set notifications.
        maxFailedAttempts:
          $ref: '#/components/schemas/maxFailedAttempts'
        maxNotificationQueue:
          $ref: '#/components/schemas/maxNotificationQueue'
        notificationDelay:
          type: integer
          description: The time (in ms) between notification pushes.
