groups:
  - name: "Container Images"
    description: "Image to be used for container"
  - name: "Nextcloud Configuration"
    description: "Configuration details for Nextcloud workload"
  - name: "Storage"
    description: "Configure Storage for Nextcloud"
  - name: "Container Configuration"
    description: "Configure nextcloud container parameters"
  - name: "Postgresql Configuration"
    description: "Configure Postgresql for nextcloud"
  - name: "CronJob configuration"
    description: "Configure CronJob for nextcloud"
  - name: "Scaling/Upgrade Policy"
    description: "Configure how pods are replaced when configuration is upgraded"
  - name: "Advanced DNS Settings"
    description: "Configure DNS settings"
  - name: "Resource Limits"
    description: "Set CPU/memory limits for Kubernetes Pod"


portals:
  web_portal:
    protocols:
      - "$kubernetes-resource_configmap_nginx-configuration_protocol"
    host:
      - "$variable-nextcloud.host"
    ports:
      - "$variable-service.nodePort"

questions:

  - variable: dnsConfig
    label: "DNS Configuration"
    group: "Advanced DNS Settings"
    schema:
      type: dict
      attrs:
        - variable: options
          label: "DNS Options"
          schema:
            type: list
            items:
              - variable: optionsEntry
                label: "Option Entry Configuration"
                schema:
                  type: dict
                  attrs:
                    - variable: name
                      label: "Option Name"
                      schema:
                        type: string
                        required: true
                    - variable: value
                      label: "Option Value"
                      schema:
                        type: string
                        required: true

  - variable: certificate
    description: "Configure Certificate for Nextcloud"
    label: "Certificate Configuration"
    group: "Nextcloud Configuration"
    schema:
      type: int
      $ref:
        - "definitions/certificate"

  - variable: nextcloud
    description: "Nextcloud configuration details"
    label: "Nextcloud Configuration"
    group: "Nextcloud Configuration"
    schema:
      type: dict
      required: true
      additional_attrs: true
      attrs:
        - variable: host
          description: "Nextcloud host to create application URLs"
          label: "Nextcloud host"
          schema:
            type: string
            $ref:
              - "definitions/nodeIP"
        - variable: username
          label: "Username"
          description: "Name of the Nextcloud admin user"
          schema:
            type: string
            default: "admin"
            required: true
        - variable: password
          label: "Password"
          description: "Password for the Nextcloud admin user"
          schema:
            type: string
            private: true
            default: "changeme"
            required: true
        - variable: datadir
          label: "Nextcloud data directory"
          description: "Configures the data directory where nextcloud stores all files from the users"
          schema:
            type: path
            default: "/var/www/html/data"
            required: true
        - variable: install_ffmpeg
          label: "Install ffmpeg"
          description: "Automatically Install ffmpeg when the container starts"
          schema:
            type: boolean
            default: false

  - variable: cronjob
    description: "Setup cronjob for nextcloud"
    label: "Setup cronjob for nextcloud"
    group: "CronJob configuration"
    schema:
      type: dict
      attrs:
        - variable: enabled
          label: "Enable cronjobs for nextcloud"
          schema:
            type: boolean
            default: false
            show_subquestions_if: true
            subquestions:
              - variable: schedule
                label: Schedule
                schema:
                  type: string
                  default: "1 */24 * * *"
                  empty: false

  # Update strategy
  - variable: updateStrategy
    description: "Upgrade Policy"
    label: "Update Strategy"
    group: "Scaling/Upgrade Policy"
    schema:
      type: string
      default: "Recreate"
      enum:
        - value: "RollingUpdate"
          description: "Create new pods and then kill old ones"
        - value: "Recreate"
          description: "Kill existing pods before creating new ones"

  - variable: service
    description: "Nextcloud Service Configuration"
    label: "Nextcloud Service Configuration"
    group: "Nextcloud Configuration"
    schema:
      type: dict
      required: true
      attrs:
        - variable: nodePort
          label: "Node Port to use for Nextcloud"
          schema:
            type: int
            min: 9000
            max: 65535
            default: 9001
            required: true

  - variable: appVolumeMounts
    label: "Nextcloud Storage"
    group: "Storage"
    schema:
      type: dict
      attrs:
        - variable: nextcloud-data
          label: "Nextcloud Data Volume"
          schema:
            type: dict
            attrs:
              - variable: datasetName
                label: "Nextcloud Data Volume Name"
                schema:
                  type: string
                  hidden: true
                  $ref:
                    - "normalize/ixVolume"
                  show_if: [["hostPathEnabled", "=", false]]
                  default: "ix-nextcloud_data"
                  editable: false
              - variable: mountPath
                label: "Nextcloud Data Mount Path"
                description: "Path where the volume will be mounted inside the pod"
                schema:
                  type: path
                  hidden: true
                  editable: false
                  default: "/var/www"
              - variable: hostPathEnabled
                label: "Enable Host Path for Nextcloud Data Volume"
                schema:
                  type: boolean
                  default: false
                  show_subquestions_if: true
                  subquestions:
                    - variable: hostPath
                      label: "Host Path for Nextcloud Data Volume"
                      schema:
                        type: hostpath
                        required: true

  - variable: extraAppVolumeMounts
    label: "Nextcloud Extra Host Path Volumes"
    group: "Storage"
    schema:
      type: list
      items:
        - variable: extraAppVolume
          label: "Nextcloud Host Path Volume"
          description: "Add an extra host path volume for nextcloud application"
          schema:
            type: dict
            attrs:
              - variable: mountPath
                label: "Mount Path in Pod"
                description: "Path where the volume will be mounted inside the pod"
                schema:
                  type: path
                  required: true
              - variable: hostPath
                label: "Host Path"
                description: "Host path"
                schema:
                  type: hostpath
                  required: true

  - variable: postgresAppVolumeMounts
    label: "Postgres Storage"
    group: "Storage"
    schema:
      type: dict
      attrs:
        - variable: postgres-data
          label: "Postgres Data Volume"
          schema:
            type: dict
            attrs:
              - variable: datasetName
                label: "Postgres Data Volume Name"
                schema:
                  type: string
                  hidden: true
                  $ref:
                    - "normalize/ixVolume"
                  default: "ix-postgres_data"
                  show_if: [["hostPathEnabled", "=", false]]
                  editable: false

              - variable: mountPath
                label: "Postgresql Data Mount Path"
                description: "Path where the volume will be mounted inside the pod"
                schema:
                  type: path
                  hidden: true
                  editable: false
                  default: "/var/lib/postgresql/data"
              - variable: hostPathEnabled
                label: "Enable Host Path for Postgres Data Volume"
                schema:
                  type: boolean
                  default: false
                  show_subquestions_if: true
                  subquestions:
                    - variable: hostPath
                      label: "Host Path for Postgres Data Volume"
                      schema:
                        type: hostpath
                        required: true

        - variable: postgres-backup
          label: "Postgres Backup Volume"
          schema:
            type: dict
            attrs:
              - variable: datasetName
                label: "Postgres Backup Volume Name"
                schema:
                  type: string
                  hidden: true
                  $ref:
                    - "normalize/ixVolume"
                  default: "ix-postgres_backups"
                  show_if: [["hostPathEnabled", "=", false]]
                  editable: false
              - variable: mountPath
                label: "Postgresql Backup Mount Path"
                description: "Path where the volume will be mounted inside the pod"
                schema:
                  type: path
                  hidden: true
                  editable: false
                  default: "/postgres_backups"
              - variable: hostPathEnabled
                label: "Enable Host Path for Postgres Backup Volume"
                schema:
                  type: boolean
                  default: false
                  show_subquestions_if: true
                  subquestions:
                    - variable: hostPath
                      label: "Host Path for Postgres Backup Volume"
                      schema:
                        type: hostpath
                        required: true

  - variable: enableResourceLimits
    label: "Enable Pod resource limits"
    group: "Resource Limits"
    schema:
      type: boolean
      default: false
  - variable: cpuLimit
    label: "CPU Limit"
    description: "CPU resource limit allow  plain integer values with suffix m(milli) e.g 1000m, 100."
    group: "Resource Limits"
    schema:
      type: string
      show_if: [["enableResourceLimits", "=", true]]
      valid_chars: "^\\d+(?:\\.\\d+(?!.*m$)|m?$)"
      default: "4000m"
  - variable: memLimit
    label: "Memory Limit"
    group: "Resource Limits"
    description: "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M,  128974848000m, 123Mi"
    schema:
      type: string
      show_if: [["enableResourceLimits", "=", true]]
      valid_chars: "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$"
      default: "8Gi"

  - variable: environmentVariables
    label: "Nextcloud environment"
    group: "Nextcloud Configuration"
    schema:
      type: list
      default: []
      items:
        - variable: environmentVariable
          label: "Environment Variable"
          schema:
            type: dict
            attrs:
              - variable: name
                label: "Name"
                schema:
                  type: string
              - variable: value
                label: "Value"
                schema:
                  type: string
