apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

transformers:
  - |-
    apiVersion: builtin
    kind: NamespaceTransformer
    metadata:
      name: notImportantHere
      namespace: apps
    unsetOnly: true

namePrefix: syncthing-
resources:
  - ../../../kustomize/bases/statefulset/
  - extra/gatus-endpoints.yaml

labels:
  - includeSelectors: true
    pairs:
      app.kubernetes.io/appName: syncthing
  - pairs:
      app.kubernetes.io/appNamespace: apps

patches:
  - path: patches/statefulset.yaml
    target:
      kind: StatefulSet
      name: ss

replacements:
  # Infisical Secret
  - source:
      kind: StatefulSet
      name: ss
      fieldPath: metadata.labels.[app.kubernetes.io/appNamespace]
    targets:
      - select:
          kind: InfisicalSecret
        fieldPaths:
          - spec.managedSecretReference.secretNamespace
      - select:
          kind: InfisicalSecret
        options:
          delimiter: "/"
          index: 1
        fieldPaths:
          - spec.authentication.universalAuth.secretsScope.secretsPath
      - select:
          kind: InfisicalSecret
        options:
          delimiter: "/"
          index: 2
        fieldPaths:
          - spec.authentication.universalAuth.secretsScope.secretsPath
  - source:
      kind: StatefulSet
      name: ss
      fieldPath: metadata.labels.[app.kubernetes.io/appName]
    targets:
      - select:
          kind: InfisicalSecret
        options:
          delimiter: "-"
          index: 0
        fieldPaths:
          - spec.managedSecretReference.secretName
      - select:
          kind: InfisicalSecret
        options:
          delimiter: "/"
          index: 2
        fieldPaths:
          - spec.authentication.universalAuth.secretsScope.secretsPath
  # Service
  - source:
      kind: StatefulSet
      name: ss
      fieldPath: spec.template.spec.containers.0.ports.0.name
    targets:
      - select:
          kind: Service
        fieldPaths:
          - spec.ports.0.name
          - spec.ports.0.targetPort
  - source:
      kind: Service
    targets:
      - select:
          kind: HTTPRoute
        fieldPaths:
          - spec.rules.0.backendRefs.0.name
  - source:
      kind: StatefulSet
      name: ss
      fieldPath: spec.template.spec.containers.0.ports.0.containerPort
    targets:
      - select:
          kind: Service
        fieldPaths:
          - spec.ports.0.port
  # HTTPRoute
  - source:
      kind: StatefulSet
      name: ss
      fieldPath: metadata.labels.[app.kubernetes.io/appName]
    targets:
      - select:
          kind: HTTPRoute
        options:
          create: true
          delimiter: "."
          index: 0
        fieldPaths:
          - spec.hostnames.0
  - source:
      kind: Service
    targets:
      - select:
          kind: HTTPRoute
        fieldPaths:
          - spec.rules.0.backendRefs.0.name
  - source:
      kind: StatefulSet
      name: ss
      fieldPath: spec.template.spec.containers.0.ports.0.containerPort
    targets:
      - select:
          kind: HTTPRoute
        fieldPaths:
          - spec.rules.0.backendRefs.0.port
  # StatefulSet
  - source:
      kind: StatefulSet
      name: ss
      fieldPath: metadata.labels.[app.kubernetes.io/appName]
    targets:
      - select:
          kind: StatefulSet
        options:
          delimiter: "-"
          index: 0
        fieldPaths:
          - spec.volumeClaimTemplates.0.metadata.annotations.name
          - spec.volumeClaimTemplates.0.metadata.name
          - spec.serviceName