{{- if .Values.opcua.configuration.enabled }}
apiVersion: {{ printf "%s/%s" .Values.crds.group .Values.crds.version }}
kind: Configuration
metadata:
  name: {{ .Values.opcua.configuration.name }}
spec:
  discoveryHandler:
    name: opcua
    discoveryDetails: |+
      opcuaDiscoveryMethod: 
        standard:
          discoveryUrls: 
          {{- toYaml .Values.opcua.configuration.discoveryDetails.discoveryUrls | nindent 10 }}
      applicationNames:
        action: {{ .Values.opcua.configuration.discoveryDetails.applicationNames.action }}
        {{- if .Values.opcua.configuration.discoveryDetails.applicationNames.items}}
        items:
        {{- toYaml .Values.opcua.configuration.discoveryDetails.applicationNames.items | nindent 8 }}
        {{- else }}
        items: []
        {{- end }}
  
  {{- if or .Values.opcua.configuration.brokerPod.image.repository .Values.opcua.configuration.brokerJob.image.repository }}
  {{- /* Only add brokerSpec if a broker image is provided */}}
  brokerSpec:
    {{- if .Values.opcua.configuration.brokerPod.image.repository }}
    brokerPodSpec:
      containers:
      - name: {{ .Values.opcua.configuration.name }}-broker
        image: {{ printf "%s:%s" .Values.opcua.configuration.brokerPod.image.repository .Values.opcua.configuration.brokerPod.image.tag | quote }}
        {{- with .Values.opcua.configuration.brokerPod.image.pullPolicy }}
        imagePullPolicy: {{ . }}
        {{- end }}
        {{- if .Values.opcua.configuration.brokerPod.env }}
        env:
          {{- range $key, $val := .Values.opcua.configuration.brokerPod.env }}
          - name: {{ $key }}
            value: {{ $val | quote }}
          {{- end }}
        {{- end }}
        {{- if .Values.opcua.configuration.brokerPod.envFrom }}
        envFrom:
        {{- range $val := .Values.opcua.configuration.brokerPod.envFrom.secretRef }}
        - secretRef:
            name: {{ $val | quote }}
        {{- end }}
        {{- range $val := .Values.opcua.configuration.brokerPod.envFrom.configMapRef }}
        - configMapRef:
            name: {{ $val | quote }}
        {{- end }}
        {{- end }}
        {{- if .Values.opcua.configuration.brokerPod.env }}
        env:
          {{- range $key, $val := .Values.opcua.configuration.brokerPod.env }}
          - name: {{ $key }}
            value: {{ $val | quote }}
          {{- end }}
        {{- end }}
        resources:
          requests:
            {{`"{{PLACEHOLDER}}"`}} : "1"
            memory: {{ .Values.opcua.configuration.brokerPod.resources.memoryRequest }}
            cpu: {{ .Values.opcua.configuration.brokerPod.resources.cpuRequest }}
          limits:
            {{`"{{PLACEHOLDER}}"`}} : "1"
            memory: {{ .Values.opcua.configuration.brokerPod.resources.memoryLimit }}
            cpu: {{ .Values.opcua.configuration.brokerPod.resources.cpuLimit }}
        {{- if or .Values.opcua.configuration.brokerPod.volumeMounts .Values.opcua.configuration.mountCertificates }}
        volumeMounts:
        {{- with .Values.opcua.configuration.brokerPod.volumeMounts}}
          {{- toYaml . | nindent 8 }}
        {{- end }}
        {{- if .Values.opcua.configuration.mountCertificates}}
        - name: credentials
          mountPath: "/etc/opcua-certs/client-pki"
          readOnly: false
        {{- end }}
        {{- end }}
      {{- with .Values.imagePullSecrets }}
      imagePullSecrets:
        {{- toYaml . | nindent 6 }}
      {{- end }}
      {{- if or .Values.opcua.configuration.brokerPod.volumeMounts .Values.opcua.configuration.mountCertificates }}
      volumes:
      {{- with .Values.opcua.configuration.brokerPod.volumes}}
        {{- toYaml . | nindent 6 }}
      {{- end }}
      {{- if .Values.opcua.configuration.mountCertificates }}
      - name: credentials
        secret:
          secretName: opcua-broker-credentials
          items:
          - key: client_certificate
            path: own/certs/AkriBroker.der
          - key: client_key
            path: own/private/AkriBroker.pfx
          - key: ca_certificate
            path: trusted/certs/SomeCA.der
          - key: ca_crl
            path: trusted/crl/SomeCA.crl
      {{- end }}
      {{- end }}
    {{- else }}
    brokerJobSpec:
      template:
        spec:
          containers:
          - name: {{ .Values.opcua.configuration.name }}-broker
            image: {{ printf "%s:%s" .Values.opcua.configuration.brokerJob.image.repository .Values.opcua.configuration.brokerPod.image.tag | quote }}
            {{- if .Values.opcua.configuration.brokerJob.command }}
            command: 
              {{- toYaml .Values.opcua.configuration.brokerJob.command | nindent 14 }}
            {{- end }}
            {{- with .Values.opcua.configuration.pullPolicy }}
            imagePullPolicy: {{ . }}
            {{- end }}
            {{- if .Values.opcua.configuration.brokerJob.env }}
            env:
              {{- range $key, $val := .Values.opcua.configuration.brokerJob.env }}
              - name: {{ $key }}
                value: {{ $val | quote }}
              {{- end }}
            {{- end }}
            {{- if .Values.opcua.configuration.brokerJob.envFrom }}
            envFrom:
            {{- range $val := .Values.opcua.configuration.brokerJob.envFrom.secretRef }}
            - secretRef:
                name: {{ $val | quote }}
            {{- end }}
            {{- range $val := .Values.opcua.configuration.brokerJob.envFrom.configMapRef }}
            - configMapRef:
                name: {{ $val | quote }}
            {{- end }}
            {{- end }}
            resources:
              requests:
                {{`"{{PLACEHOLDER}}"`}} : "1"
                memory: {{ .Values.opcua.configuration.brokerJob.resources.memoryRequest }}
                cpu: {{ .Values.opcua.configuration.brokerJob.resources.cpuRequest }}
              limits:
                {{`"{{PLACEHOLDER}}"`}} : "1"
                memory: {{ .Values.opcua.configuration.brokerJob.resources.memoryLimit }}
                cpu: {{ .Values.opcua.configuration.brokerJob.resources.cpuLimit }}
            {{- with .Values.opcua.configuration.brokerJob.volumeMounts}}
            volumeMounts:
              {{- toYaml . | nindent 12 }}
            {{- end }}
          {{- with .Values.opcua.configuration.brokerJob.volumes}}
          volumes:
            {{- toYaml . | nindent 10 }}
          {{- end }}
          restartPolicy: {{ .Values.opcua.configuration.brokerJob.restartPolicy }}
          {{- with .Values.imagePullSecrets }}
          imagePullSecrets:
            {{- toYaml . | nindent 10 }}
          {{- end }}
      backoffLimit: {{ .Values.opcua.configuration.brokerJob.backoffLimit }}
      parallelism: {{ .Values.opcua.configuration.brokerJob.parallelism }}
      completions: {{ .Values.opcua.configuration.brokerJob.completions }}
    {{- end }}
  {{- end }}
  {{- /* Only add service specs if a broker image was specified and service
  creation was not disabled */}}
  {{- if .Values.opcua.configuration.brokerPod.image.repository }}
  {{- if .Values.opcua.configuration.createInstanceServices }}
  instanceServiceSpec:
    type: {{ .Values.opcua.configuration.instanceService.type }}
    ports:
    - name: grpc
      port: {{ .Values.opcua.configuration.instanceService.port }}
      protocol: {{ .Values.opcua.configuration.instanceService.protocol }}
      targetPort: {{ .Values.opcua.configuration.instanceService.targetPort }}
  {{- end }}
  {{- if .Values.opcua.configuration.createConfigurationService }}
  configurationServiceSpec:
    type: {{ .Values.opcua.configuration.configurationService.type }}
    ports:
    - name: grpc
      port: {{ .Values.opcua.configuration.configurationService.port }}
      protocol: {{ .Values.opcua.configuration.configurationService.protocol }}
      targetPort: {{ .Values.opcua.configuration.configurationService.targetPort }}
  {{- end }}
  {{- end }}
  {{- if .Values.opcua.configuration.brokerProperties }}
  brokerProperties:
  {{- range $key, $val := .Values.opcua.configuration.brokerProperties }}
  {{- $key | nindent 4 }}: {{ $val | quote }}
  {{- end }}
  {{- else }}
  brokerProperties: {}
  {{- end }}
  capacity: {{ .Values.opcua.configuration.capacity }}
{{- end }}