{{- range $processName, $config := .Values.processes }}
{{- if not (hasKey $config "web") }}
# Skip {{ $processName }} as it doesn't have a web section
{{- continue }}
{{- end }}

{{- if and $config.web.domains (eq $.Values.global.network.ingress_class "traefik") }}
{{- $mappings := dict }}
{{- range $pdx, $port_map := $config.web.port_maps }}
{{- $mappings := set $mappings $port_map.name "true" }}
{{- end }}
{{- range $pdx, $port_map := $config.web.port_maps }}
{{- if and (eq $port_map.scheme "https") (hasKey $mappings (printf "http-80-%.0f" $port_map.container_port)) }}
{{- continue }}
{{- end }}
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  annotations:
    dokku.com/managed: "true"
    {{ include "print.annotations" (dict "config" $.Values.global "key" "traefik_ingressroute") | indent 4 }}
    {{ include "print.annotations" (dict "config" $config "key" "traefik_ingressroute") | indent 4 }}
  labels:
    app.kubernetes.io/instance: {{ $.Values.global.app_name }}-{{ $processName }}
    app.kubernetes.io/name: {{ $processName }}
    app.kubernetes.io/part-of: {{ $.Values.global.app_name }}
    {{ include "print.labels" (dict "config" $.Values.global "key" "traefik_ingressroute") | indent 4 }}
    {{ include "print.labels" (dict "config" $config "key" "traefik_ingressroute") | indent 4 }}
  name: {{ $.Values.global.app_name }}-{{ $processName }}-{{ $port_map.name }}
  namespace: {{ $.Values.global.namespace }}
spec:
  entryPoints:
  {{- if $config.web.tls.enabled }}
  - websecure
  {{- end }}
  - web
  routes:
    {{- range $ddx, $domain := $config.web.domains }}
    - kind: Rule
      match: Host(`{{ $domain.name }}`)
      {{- if $config.web.tls.enabled }}
      middlewares:
        - name: {{ $.Values.global.app_name}}-{{ $processName }}-redirect-to-https
          namespace: {{ $.Values.global.namespace }}
      {{- end }}
      services:
      - name: {{ $.Values.global.app_name }}-{{ $processName }}
        namespace: {{ $.Values.global.namespace }}
        passHostHeader: true
        port: {{ $port_map.name }}
        scheme: http
    {{- end }}
  {{- if $config.web.tls.enabled }}
  tls:
    secretName: tls-{{ $.Values.global.app_name }}-{{ $processName }}
  {{- end }}
{{- end }}
{{- end }}
{{- end }}
