id: deploy
type: PageHeaderMenu
properties:
  title: Deploy

layout:
  contentJustify: center

areas:
  content:
    blocks:
      - id: content
        type: Card
        layout:
          size: 1000
          contentGutter: 10
        blocks:
          - id: title
            type: Title
            layout:
              span: 24
            properties:
              content: Deploy
          - id: leftcolumn
            type: Box
            layout:
              span: 12
              contentGutter: 10
            blocks:
              - id: macaddress
                required: true
                type: TextInput
                properties:
                  title: MAC Address
                  placeholder: 00:00:00:00:00:00
                validate:
                  - status: error
                    message: Enter a valid MAC address
                    pass:
                      _regex: ^(?!(?:00[:-]){5}00)((?:[0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2})$
              - id: projectname
                type: TextInput
                properties:
                  title: Project name
              - id: hostname
                required: true
                type: TextInput
                properties:
                  title: Hostname
                  label:
                    extra: Can only contain alphanumeric characters and hyphens; must be between 1 and 15 characters long
                    extraStyle:
                      font-size: smaller
                      font-style: italic
                validate:
                  - status: error
                    message: Enter a valid hostname
                    pass:
                      _regex: ^([a-zA-Z0-9]{1,15}|[a-zA-Z0-9][a-zA-Z0-9\-]{0,13}[a-zA-Z0-9])$
              - id: ipaddress
                required: true
                type: TextInput
                properties:
                  title: IP address
                  placeholder: 0.0.0.0
                validate:
                  - status: error
                    message: Enter a valid IP address
                    pass:
                      _regex: ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
              - id: subnetmask
                required: true
                type: TextInput
                properties:
                  title: Subnet mask
                  placeholder: 255.255.255.0
                validate:
                  - status: error
                    message: Enter a valid subnet mask
                    pass:
                      _regex: ^(?:(255|254|252|248|240|224|192|128|0+)(?:\.(?!$)|$)){4}$
              - id: gateway
                required: true
                type: TextInput
                properties:
                  title: Gateway
                  placeholder: 0.0.0.0
                validate:
                  - status: error
                    message: Enter a valid IP address
                    pass:
                      _regex: ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
              - id: dnsserver
                required: true
                type: TextInput
                properties:
                  title: DNS server
                  placeholder: 1.1.1.1, 1.0.0.1
                  label:
                    extra: (comma-separated list of IP addresses)
                    extraStyle:
                      font-size: smaller
                      font-style: italic
                validate:
                  - status: error
                    message: Enter one or more valid IP addresses, separated by a comma
                    pass:
                      _regex: ^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?))(?:,\s*(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)))*$
              - id: dnssuffix
                required: true
                type: TextInput
                properties:
                  title: DNS suffix
                  placeholder: example.org
                validate:
                  - status: error
                    message: Enter a valid domain name
                    pass:
                      _regex: (?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63}$)
          - id: rightcolumn
            type: Box
            layout:
              span: 12
              contentGutter: 10
            blocks:
              - id: certificate
                required: true
                type: TextArea
                properties:
                  autoSize:
                    maxRows: 4
                    minRows: 4
                  block: true
                  title: Certificate
                  placeholder: |
                    -----BEGIN CERTIFICATE-----
                    [...]
                    -----END CERTIFICATE-----
                  label:
                    extra: PEM format
                    extraStyle:
                      font-size: smaller
                      font-style: italic
              - id: privatekey
                required: true
                type: TextArea
                properties:
                  autoSize:
                    maxRows: 4
                    minRows: 4
                  block: true
                  title: Private key
                  placeholder: |
                    -----BEGIN RSA PRIVATE KEY-----
                    [...]
                    -----END RSA PRIVATE KEY-----
                  label:
                    extra: PEM format
                    extraStyle:
                      font-size: smaller
                      font-style: italic
              - id: fullchain
                required: true
                type: TextArea
                properties:
                  autoSize:
                    maxRows: 4
                    minRows: 4
                  block: true
                  title: Issuing CA chain
                  placeholder: |
                    -----BEGIN CERTIFICATE-----
                    [...]
                    -----END CERTIFICATE-----
                  label:
                    extra: PEM format
                    extraStyle:
                      font-size: smaller
                      font-style: italic
          - id: warning
            type: Alert
            properties:
              message: Only *after* pressing 'Start Deployment', can the physical device be booted over LAN
              type: warning
          - id: reset_button
            type: Button
            layout:
              grow: 1
            properties:
              title: Reset
              icon: ClearOutlined
              block: true
              type: default
            events:
              onClick:
                - id: reset
                  type: Reset
          - id: start_deployment
            type: Button
            layout:
              grow: 3
            properties:
              title: Start Deployment
              icon: RocketOutlined
              block: true
            # requests:
            #   - id: update_brand
            #     type: MongoDBUpdateOne # MongoDb updateOne request to update the brand.
            #     connectionId: brands
            #     properties:
            #       filter:
            #         _id:
            #           _state: _id # Select the document that matches the document's _id that is in state.
            #       update:
            #         $set:
            #           name:
            #             _state: name # Insert the brand name we set in state.
            #           description:
            #             _state: description # Insert the description name we set in state.
            #           updated_at:
            #             _date: now # Set the updated_at date as current time.
            events:
              onClick:
                - id: validate
                  type: Validate
                - id: update_brand  # Call the update_brand request.
                  type: Request
                  params: update_brand