# Include{groups}
portals:
  open:
# Include{portalLink}
questions:
# Include{global}
# Include{workload}
# Include{workloadDeployment}
# Include{replicas1}
# Include{podSpec}
# Include{containerMain}
# Include{containerBasic}
# Include{containerAdvanced}
# Include{containerConfig}
  - variable: nextcloud
    group: App Configuration
    label: Nextcloud
    schema:
      additional_attrs: true
      type: dict
      attrs:
        - variable: credentials
          label: Initial Credentials
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: initialAdminUser
                label: Initial Admin User
                description: Sets the initial admin username
                schema:
                  type: string
                  required: true
                  default: ""
              - variable: initialAdminPassword
                label: Initial Admin Password
                description: Sets the initial admin password
                schema:
                  type: string
                  required: true
                  private: true
                  default: ""
        - variable: general
          label: General
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: run_optimize
                label: Run Optimize Scripts
                description: |
                  Runs the following commands at startup:</br>
                  occ db:add-missing-indices</br>
                  occ db:add-missing-columns</br>
                  occ db:add-missing-primary-keys</br>
                  yes | occ db:convert-filecache-bigint</br>
                  occ maintenance:mimetype:update-js</br>
                  occ maintenance:mimetype:update-db</br>
                  occ maintenance:update:htaccess</br>
                schema:
                  type: boolean
                  default: false
              - variable: default_phone_region
                label: Default Phone Region
                description: |
                  Sets the default phone region in ISO_3166-1 format (e.g. US).</br>
                  https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements
                schema:
                  type: string
                  valid_chars: '^[A-Z]{2}$'
                  required: true
                  default: ""
              - variable: accessIP
                label: Access IP
                description: Set to the IP-Address used to reach Nextcloud.
                schema:
                  type: string
                  required: true
                  $ref:
                    - "definitions/nodeIP"
        - variable: files
          label: Files Configuration
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: shared_folder_name
                label: Shared Folder Name
                schema:
                  type: string
                  required: true
                  default: Shared
              - variable: max_chunk_size
                label: Max Chunk Size
                schema:
                  type: int
                  required: true
                  default: 10485760
        - variable: expirations
          label: Expirations Configuration
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: activity_expire_days
                label: Activity Expire Days
                schema:
                  type: int
                  required: true
                  default: 90
              - variable: trash_retention_obligation
                label: Trash Retention Obligation
                schema:
                  type: string
                  required: true
                  default: auto
              - variable: versions_retention_obligation
                label: Versions Retention Obligation
                schema:
                  type: string
                  required: true
                  default: auto
        - variable: previews
          label: Previews Configuration
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: enabled
                label: Enable Previews
                schema:
                  type: boolean
                  default: true
                  show_subquestions_if: true
                  subquestions:
                    - variable: imaginary
                      label: Enable imaginary
                      description: |
                        Enable imaginary to generate previews in the background.</br>
                        It will also deploy the needed container.
                      schema:
                        type: boolean
                        default: true
                    - variable: cron
                      label: Enable cron
                      description: |
                        Enable cron to generate previews in the background.
                      schema:
                        type: boolean
                        default: true
                    - variable: schedule
                      label: Cron Schedule
                      schema:
                        type: string
                        default: "*/30 * * * *"
                    - variable: max_x
                      label: Max X
                      schema:
                        type: int
                        required: true
                        default: 2048
                    - variable: max_y
                      label: Max Y
                      schema:
                        type: int
                        required: true
                        default: 2048
                    - variable: max_memory
                      label: Max Memory
                      schema:
                        type: int
                        required: true
                        default: 1024
                    - variable: max_allowed_resolution
                      label: Max Allowed Resolution
                      schema:
                        type: string
                        valid_chars: '^[0-9]{1,5}(\.[0-9]{1,2})?$'
                        show_if: [["imaginary", "=", true]]
                        required: true
                        default: "18.0"
                    - variable: max_file_size_image
                      label: Max File Size Image
                      schema:
                        type: int
                        required: true
                        default: 50
                    - variable: jpeg_quality
                      label: JPEG Quality
                      schema:
                        type: int
                        required: true
                        default: 60
                    - variable: square_sizes
                      label: Square Sizes
                      schema:
                        type: string
                        required: true
                        default: "32 256"
                    - variable: width_sizes
                      label: Width Sizes
                      schema:
                        type: string
                        required: true
                        default: "256 384"
                    - variable: height_sizes
                      label: Height Sizes
                      schema:
                        type: string
                        required: true
                        default: "256"
                    - variable: providers
                      label: Providers
                      schema:
                        type: list
                        empty: false
                        required: true
                        default:
                          - BMP
                          - GIF
                          - JPEG
                          - Krita
                          - MarkDown
                          - MP3
                          - OpenDocument
                          - PNG
                          - TXT
                          - XBitmap
                        items:
                          - variable: provider_entry
                            label: Provider Entry
                            schema:
                              type: string
                              required: true
                              default: ""
                              enum:
                                - value: BMP
                                  description: BMP
                                - value: Font
                                  description: Font
                                - value: GIF
                                  description: GIF
                                - value: HEIC
                                  description: HEIC
                                - value: Illustrator
                                  description: Illustrator
                                - value: JPEG
                                  description: JPEG
                                - value: Krita
                                  description: Krita
                                - value: MarkDown
                                  description: MarkDown
                                - value: Movie
                                  description: Movie
                                - value: MP3
                                  description: MP3
                                - value: MSOffice2003
                                  description: MSOffice2003
                                - value: MSOffice2007
                                  description: MSOffice2007
                                - value: MSOfficeDoc
                                  description: MSOfficeDoc
                                - value: OpenDocument
                                  description: OpenDocument
                                - value: PDF
                                  description: PDF
                                - value: Photoshop
                                  description: Photoshop
                                - value: PNG
                                  description: PNG
                                - value: Postscript
                                  description: Postscript
                                - value: StarOffice
                                  description: StarOffice
                                - value: SVG
                                  description: SVG
                                - value: TIFF
                                  description: TIFF
                                - value: TXT
                                  description: TXT
                                - value: XBitmap
                                  description: XBitmap
        - variable: Logging
          label: Logging Configuration
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: log_level
                label: Log Level
                schema:
                  type: string
                  required: true
                  default: "2"
                  enum:
                    - value: "0"
                      description: Debug
                    - value: "1"
                      description: Info
                    - value: "2"
                      description: Warning
                    - value: "3"
                      description: Error
                    - value: "4"
                      description: Fatal
              - variable: log_date_format
                label: Log Date Format
                schema:
                  type: string
                  required: true
                  default: d/m/Y H:i:s
        - variable: notify_push
          label: Notify Push Configuration
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: enabled
                label: Enable Notify Push
                description: |
                  Enable and Configure Notify Push.</br>
                  It will also deploy the needed container
                schema:
                  type: boolean
                  default: true
        - variable: clamav
          label: ClamAV Configuration
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: enabled
                label: Enable ClamAV
                description: |
                  Enable and configure ClamAV.</br>
                  It will also deploy the needed container.</br>
                  Keep in mind that this will run as root.</br>
                  https://github.com/Cisco-Talos/clamav/issues/478
                schema:
                  type: boolean
                  default: false
                  show_subquestions_if: true
                  subquestions:
                    - variable: stream_max_length
                      label: Stream Max Length
                      schema:
                        type: int
                        required: true
                        default: 104857600
                    - variable: file_max_size
                      label: File Max Size
                      schema:
                        type: int
                        required: true
                        default: -1
                    - variable: infected_action
                      label: Infected Action
                      schema:
                        type: string
                        required: true
                        default: only_log
                        enum:
                          - value: delete
                            description: Delete
                          - value: only_log
                            description: Only Log
        - variable: collabora
          label: Collabora Configuration
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: enabled
                label: Enable Collabora
                description: |
                  Enable and configure Collabora.</br>
                  It will also deploy the needed container.</br>
                  Keep in mind that this will run as root.
                schema:
                  type: boolean
                  default: false
                  show_subquestions_if: true
                  subquestions:
                    - variable: interface_mode
                      label: Interface Mode
                      schema:
                        type: string
                        required: true
                        default: default
                        enum:
                          - value: default
                            description: Default
                          - value: compact
                            description: Compact
                          - value: tabbed
                            description: Tabbed
                    - variable: username
                      label: Username
                      schema:
                        type: string
                        default: admin
                        required: true
                    - variable: password
                      label: Password
                      schema:
                        type: string
                        default: ""
                        required: true
                    - variable: dictionaries
                      label: Dictionaries
                      schema:
                        type: list
                        empty: false
                        required: true
                        default:
                          - de_DE
                          - en_GB
                          - en_US
                          - el_GR
                          - es_ES
                          - fr_FR
                          - pt_BR
                          - pt_PT
                          - it
                          - nl
                          - ru
                        items:
                          - variable: dictionary
                            label: Dictionary
                            schema:
                              type: string
                              required: true
                              default: ""
        - variable: onlyoffice
          label: Only Office Configuration
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: enabled
                label: Enable OnlyOffice
                description: |
                  Enable and configure OnlyOffice.</br>
                  This will NOT deploy the needed container.</br>
                  You need to deploy it yourself.
                schema:
                  type: boolean
                  default: false
                  show_subquestions_if: true
                  subquestions:
                    - variable: url
                      label: URL
                      schema:
                        type: string
                        required: true
                        default: ""
                    - variable: jwt
                      label: JWT
                      schema:
                        type: string
                        required: true
                        default: ""
                    - variable: jwt_header
                      label: JWT Header
                      schema:
                        type: string
                        required: true
                        default: Authorization
        - variable: php
          label: PHP Configuration
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: memory_limit
                label: Memory Limit
                schema:
                  type: string
                  required: true
                  default: 1G
              - variable: upload_limit
                label: Upload Limit
                schema:
                  type: string
                  required: true
                  default: 10G
              - variable: pm_max_children
                label: Max Children
                schema:
                  type: int
                  required: true
                  default: 180
              - variable: pm_start_servers
                label: Start Servers
                schema:
                  type: int
                  required: true
                  default: 18
              - variable: pm_min_spare_servers
                label: Minimum Spare Servers
                schema:
                  type: int
                  required: true
                  default: 12
              - variable: pm_max_spare_servers
                label: Maximum Spare Servers
                schema:
                  type: int
                  required: true
                  default: 30
        - variable: opcache
          label: OPCache Configuration
          schema:
            additional_attrs: true
            type: dict
            attrs:
              - variable: interned_strings_buffer
                label: Interned Strings Buffer
                description: The amount of memory used to store interned strings, in megabytes.
                schema:
                  type: int
                  required: true
                  default: 32
              - variable: max_accelerated_files
                label: Max Accelerated Files
                description: The maximum number of keys (and therefore scripts) in the OPcache hash table.
                schema:
                  type: int
                  required: true
                  default: 10000
              - variable: memory_consumption
                label: Memory Consumption
                description: The size of the shared memory storage used by OPcache, in megabytes.
                schema:
                  type: int
                  required: true
                  default: 128
              - variable: revalidate_freq
                label: Revalidate Frequency
                description: How often to check script timestamps for updates, in seconds. 0 will result in OPcache checking for updates on every request.
                schema:
                  type: int
                  required: true
                  default: 60
              - variable: jit_buffer_size
                label: JIT Buffer Size
                description: The amount of shared memory (in megabytes) to reserve for compiled JIT code. A zero value disables the JIT.
                schema:
                  type: int
                  required: true
                  default: 128

# Include{podOptions}
# Include{serviceRoot}
        - variable: main
          label: Main Service
          description: The Primary service on which the healthcheck runs, often the webUI
          schema:
            additional_attrs: true
            type: dict
            attrs:
# Include{serviceSelectorLoadBalancer}
# Include{serviceSelectorExtras}
                    - variable: main
                      label: Main Service Port Configuration
                      schema:
                        additional_attrs: true
                        type: dict
                        attrs:
                          - variable: port
                            label: Port
                            description: This port exposes the container port on the service
                            schema:
                              type: int
                              default: 12000
                              required: true
# Include{serviceExpertRoot}
# Include{serviceExpert}
# Include{serviceList}
# Include{persistenceRoot}
        - variable: html
          label: App HTML Storage
          description: Stores the Application HTML.
          schema:
            additional_attrs: true
            type: dict
            attrs:
# Include{persistenceBasic}
        - variable: config
          label: App Config Storage
          description: Stores the Application Config.
          schema:
            additional_attrs: true
            type: dict
            attrs:
# Include{persistenceBasic}
        - variable: data
          label: User Data Storage
          description: Stores the User Data.
          schema:
            additional_attrs: true
            type: dict
            attrs:
# Include{persistenceBasic}
# Include{persistenceList}
# Include{ingressRoot}
        - variable: main
          label: Main Ingress
          schema:
            additional_attrs: true
            type: dict
            attrs:
# Include{ingressDefault}
# Include{ingressTLS}
# Include{ingressTraefik}
# Include{ingressList}
# Include{securityContextRoot}
              - variable: runAsUser
                label: runAsUser
                description: The UserID of the user running the application
                schema:
                  type: int
                  default: 568
              - variable: runAsGroup
                label: runAsGroup
                description: The groupID of the user running the application
                schema:
                  type: int
                  default: 568
# Include{securityContextContainer}
# Include{securityContextAdvanced}
# Include{securityContextPod}
              - variable: fsGroup
                label: fsGroup
                description: The group that should own ALL storage.
                schema:
                  type: int
                  default: 568
# Include{resources}
# Include{metrics}
# Include{prometheusRule}
# Include{advanced}
# Include{addons}
# Include{codeserver}
# Include{netshoot}
# Include{vpn}
# Include{documentation}
