$schema: http://json-schema.org/draft-04/schema#

type: object
properties:
  active:
    type: boolean

  alpha:
    description: The default alpha, stored as default_alpha in code after init
    type: number

  require_confirm:
    type: boolean
    default: false
    description: If true, the user must confirm entering a cue to enter it via UI.

  backtrack:
    type: boolean
    description: |
      When jumping to a cue other than the next one,
      apply values from previous cues as if you got there without jumping.

  blend:
    type: string

  blend_args:
    type: object
    additionalProperties: true

  bpm:
    type: number

  command_tag:
    type: string

  crossfade:
    type: number

  cues:
    type: object
    required:
      - default

  default_next:
    type: string

  display_tags:
    type: array
    items: {}
    additionalItems: true

  event_buttons:
    type: array
    items: {}
    additionalItems: true

  info_display:
    type: string

  midi_source:
    type: string

  mqtt_server:
    type: string

  mqtt_sync_features:
    type: object
    additionalProperties: true

  music_visualizations:
    type: string

  notes:
    type: string

  priority:
    type: number

  slide_overlay_url:
    type: string

  slideshow_layout:
    type: string
    description: Customize the group web player view
    default: |
        <style>
            slideshow-app {
                display: flex;
                flex-wrap: wrap;
                flex-direction: row;
            }

            main{
              display: flex;
              flex-direction: column;
              flex-grow:10;
            }

            media-player {
                flex-grow: 5;
            }

            .sidebar {
                background: linear-gradient(175deg, rgba(36,36,36,1) 0%, rgba(77,77,77,1) 100%);
                max-width: calc(max(30%, min(24em, 100%) ));
                text-wrap: wrap;
            }

        </style>


        <slideshow-app>
            <main>
                <header></header>
                <media-player></media-player>
                <footer></footer>
            </main>
            <div class="sidebar" v-if="cueText" v-html="cueText">
            </div>
        </slideshow-app>


  slideshow_transform:
    type: object
    additionalProperties: true
    default:
      perspective: 100
      scale_x: 100
      scale_y: 100
      rotate_z: 0
      rotate_x: 0
      rotate_y: 0
      translate_x: 0
      translate_y: 0

    properties:
      scale:
        type: number
      rotate_z:
        type: number
      rotate_x:
        type: number
      rotate_y:
        type: number
      translate_x:
        type: number
      translate_y:
        type: number

  sound_output:
    type: string

  utility:
    type: boolean

  hide:
    type: boolean

  uuid:
    type: string

  cue_providers:
    type: array
    items:
      type: string
    description: |
      A list of providers to use. Each provider is a URI like file://some/directory/
      And allows cues to be auto-synced with the stuff in the dir.

  enable_timing:
    type: boolean
    description: |
      This disables cue lengths and @time events

additionalProperties: true

required:
  - active
  - alpha
  - backtrack
  - blend
  - blend_args
  - bpm
  - command_tag
  - crossfade
  - cues
  - default_next
  - display_tags
  - event_buttons
  - info_display
  - midi_source
  - mqtt_server
  - mqtt_sync_features
  - music_visualizations
  - notes
  - priority
  - slide_overlay_url
  - sound_output
  - utility
  - uuid
