{{- define "tc.v1.common.lib.ingress.integration.nginx.auth.authentik" -}}
  {{- $objectData := .objectData -}}
  {{- $auth := .auth -}}

  {{- if and $auth.respondHeaders (not (kindIs "slice" $auth.responseHeaders)) -}}
    {{- fail (printf "Ingress - Expected [integrations.nginx.auth.responseHeaders] to be a [slice], but got [%s]" (kindOf $auth.responseHeaders)) -}}
  {{- end -}}

  {{- $respHeaders := ($auth.responseHeaders | default (list
    "Set-Cookie"
    "X-authentik-username"
    "X-authentik-groups"
    "X-authentik-entitlements"
    "X-authentik-email"
    "X-authentik-name"
    "X-authentik-uid"
  )) -}}

  {{- if or (not $auth.internalHost) (not $auth.externalHost) -}}
    {{- fail "Ingress - Expected [integrations.nginx.auth.internalHost] and [integrations.nginx.auth.externalHost] to be set" -}}
  {{- end -}}

  {{- $_ := set $objectData.annotations "nginx.ingress.kubernetes.io/auth-method" "GET" -}}
  {{- $_ := set $objectData.annotations "nginx.ingress.kubernetes.io/auth-response-headers" (join "," $respHeaders) -}}
  {{- $_ := set $objectData.annotations "nginx.ingress.kubernetes.io/auth-snippet" "proxy_set_header X-Forwarded-Host $http_host;" -}}
  {{- $_ := set $objectData.annotations "nginx.ingress.kubernetes.io/auth-url" (printf "http://%s/outpost.goauthentik.io/auth/nginx" $auth.internalHost) -}}
  {{- $_ := set $objectData.annotations "nginx.ingress.kubernetes.io/auth-signin" (printf "https://%s/outpost.goauthentik.io/start?rd=$scheme://$http_host$escaped_request_uri" $auth.externalHost) -}}
{{- end -}}

{{- define "tc.v1.common.lib.ingress.integration.nginx.auth.authelia" -}}
  {{- $objectData := .objectData -}}
  {{- $auth := .auth -}}

  {{- if and $auth.respondHeaders (not (kindIs "slice" $auth.responseHeaders)) -}}
    {{- fail (printf "Ingress - Expected [integrations.nginx.auth.responseHeaders] to be a [slice], but got [%s]" (kindOf $auth.responseHeaders)) -}}
  {{- end -}}

  {{- $respHeaders := ($auth.responseHeaders | default (list
    "Remote-User"
    "Remote-Name"
    "Remote-Groups"
    "Remote-Email"
  )) -}}

  {{- if or (not $auth.internalHost) (not $auth.externalHost) -}}
    {{- fail "Ingress - Expected [integrations.nginx.auth.internalHost] and [integrations.nginx.auth.externalHost] to be set" -}}
  {{- end -}}

  {{- $_ := set $objectData.annotations "nginx.ingress.kubernetes.io/auth-method" "GET" -}}
  {{- $_ := set $objectData.annotations "nginx.ingress.kubernetes.io/auth-url" (printf "http://%s/api/verify" $auth.internalHost) -}}
  {{- $_ := set $objectData.annotations "nginx.ingress.kubernetes.io/auth-response-headers" (join "," $respHeaders) -}}
  {{- $_ := set $objectData.annotations "nginx.ingress.kubernetes.io/auth-signin" (printf "https://%s?rm=$request_method" $auth.externalHost) -}}
{{- end -}}
