# k8s/ingress.yaml
# ============================================
# Chat Switchboard - Ingress
# ============================================
# Path-based routing on a single domain:
#   switchboard.DOMAIN/         → production
#   switchboard.DOMAIN/test/    → test (main branch)
#   switchboard.DOMAIN/dev/     → dev  (PR branches)
#
# Each environment deploys its own Ingress resource.
# Traefik merges rules for the same host automatically.
# Longer path prefixes take priority (Traefik default).
#
# BASE_PATH is empty for prod, "/test" or "/dev" for others.
# Backend handles BASE_PATH via r.Group(cfg.BasePath).
# Frontend entrypoint injects BASE_PATH into nginx + HTML.
# ============================================
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: switchboard${DEPLOY_SUFFIX}
  namespace: ${NAMESPACE}
  annotations:
    cert-manager.io/cluster-issuer: "${CERT_ISSUER}"
    traefik.ingress.kubernetes.io/router.entrypoints: websecure
  labels:
    app: switchboard
    env: ${ENVIRONMENT}
spec:
  ingressClassName: "traefik"
  tls:
  - hosts:
    - ${DEPLOY_HOST}
    secretName: switchboard-tls
  rules:
  - host: "${DEPLOY_HOST}"
    http:
      paths:
      # API routes → backend
      - path: ${BASE_PATH}/api
        pathType: Prefix
        backend:
          service:
            name: switchboard-be${DEPLOY_SUFFIX}
            port:
              number: 8080
      # Health check → backend
      - path: ${BASE_PATH}/health
        pathType: Prefix
        backend:
          service:
            name: switchboard-be${DEPLOY_SUFFIX}
            port:
              number: 8080
      # WebSocket → backend (must be Prefix, not Exact — Traefik's Exact
      # doesn't reliably win over Prefix rules in the same Ingress resource)
      - path: ${BASE_PATH}/ws
        pathType: Prefix
        backend:
          service:
            name: switchboard-be${DEPLOY_SUFFIX}
            port:
              number: 8080
      # Everything else under this prefix → frontend
      - path: ${BASE_PATH}/
        pathType: Prefix
        backend:
          service:
            name: switchboard-fe${DEPLOY_SUFFIX}
            port:
              number: 80
