{{ define "alloy.config.metricsServiceRemoteWrite" }}
{{- with .Values.externalServices.prometheus }}
prometheus.remote_write "metrics_service" {
  endpoint {
    url = nonsensitive(remote.kubernetes.secret.metrics_service.data[{{ .hostKey | quote }}]) + "{{ .writeEndpoint }}"
    headers = {
      "X-Scope-OrgID" = nonsensitive(remote.kubernetes.secret.metrics_service.data[{{ .tenantIdKey | quote }}]),
{{- range $key, $value := .extraHeaders }}
      {{ $key | quote }} = {{ $value | quote }},
{{- end }}
{{- range $key, $value := .extraHeadersFrom }}
      {{ $key | quote }} = {{ $value }},
{{- end }}
    }
{{- if .proxyURL }}
    proxy_url = {{ .proxyURL | quote }}
{{- end }}
{{ if eq .authMode "basic" }}
    basic_auth {
      username = nonsensitive(remote.kubernetes.secret.metrics_service.data[{{ .basicAuth.usernameKey | quote }}])
      password = remote.kubernetes.secret.metrics_service.data[{{ .basicAuth.passwordKey | quote }}]
    }
{{- else if eq .authMode "bearerToken" }}
  {{- if .bearerToken.tokenFile }}
    bearer_token_file = {{  .bearerToken.tokenFile | quote  }}
  {{- else }}
    bearer_token = remote.kubernetes.secret.metrics_service.data[{{ .bearerToken.tokenKey | quote }}]
  {{- end }}
{{- else if eq .authMode "oauth2" }}
    oauth2 {
      client_id = nonsensitive(remote.kubernetes.secret.metrics_service.data[{{ .oauth2.clientIdKey | quote }}])
      {{- if eq .oauth2.clientSecretFile "" }}
      client_secret = remote.kubernetes.secret.metrics_service.data[{{ .oauth2.clientSecretKey | quote }}]
      {{- else }}
      client_secret_file = {{ .oauth2.clientSecretFile | quote }}
      {{- end }}
      {{- if .oauth2.endpointParams }}
      endpoint_params = {
      {{- range $k, $v := .oauth2.endpointParams }}
        {{ $k }} = {{ $v | quote }},
      {{- end }}
      }
      {{- end }}
      {{- if .oauth2.proxyURL }}
      proxy_url = {{ .oauth2.proxyURL | quote }}
      {{- end }}
      {{- if .oauth2.noProxy }}
      no_proxy = {{ .oauth2.noProxy | quote }}
      {{- end }}
      {{- if .oauth2.proxyFromEnvironment }}
      proxyFromEnvironment = {{ .oauth2.proxyFromEnvironment }}
      {{- end }}
      {{- if .oauth2.proxyConnectHeader }}
      proxy_connect_header = {{ .oauth2.proxyConnectHeader | toJson }}
      {{- end }}
      {{- if .oauth2.scopes }}
      scopes = {{ .oauth2.scopes | toJson }}
      {{- end }}
      {{- if .oauth2.tokenURL }}
      token_url = {{ .oauth2.tokenURL | quote }}
      {{- end }}
    }
{{- end }}
{{ if .writeRelabelConfigRules }}
{{ .writeRelabelConfigRules | indent 4 }}
{{- end }}
{{- if .tls }}
    tls_config {
    {{- range $k, $v := .tls }}
      {{ $k }} = {{ $v | toJson }}
    {{- end }}
    }
{{- end }}
    send_native_histograms = {{ .sendNativeHistograms }}

    queue_config {
      capacity = {{ .queue_config.capacity }}
      min_shards = {{ .queue_config.min_shards }}
      max_shards = {{ .queue_config.max_shards }}
      max_samples_per_send = {{ .queue_config.max_samples_per_send }}
      batch_send_deadline = {{ .queue_config.batch_send_deadline | quote }}
      min_backoff = {{ .queue_config.min_backoff | quote }}
      max_backoff = {{ .queue_config.max_backoff | quote }}
      retry_on_http_429 = {{ .queue_config.retry_on_http_429 }}
      sample_age_limit = {{ .queue_config.sample_age_limit | quote }}
    }
  }

  wal {
    truncate_frequency = {{ .wal.truncateFrequency | quote }}
    min_keepalive_time = {{ .wal.minKeepaliveTime | quote }}
    max_keepalive_time = {{ .wal.maxKeepaliveTime | quote }}
  }

  external_labels = {
  {{- range $key, $value := .externalLabels }}
    {{ $key }} = {{ $value | quote }},
  {{- end }}
  {{- range $key, $value := .externalLabelsFrom }}
    {{ $key }} = {{ $value }},
  {{- end }}
{{- end }}
  }
}
{{ end }}
