#!/bin/bash
# Diagnose für Traefik — auf dem HOST ausführen.
# Ändert NICHTS. Gibt nur aus, was für die Route nötig ist.
#
# Aufruf:  bash /docker/hermes-agent-r3tt/data/projects/gastro-ki/traefik-check.sh

set -u
TR="traefik-traefik-1"

echo "==================== 1. Container-Status ===================="
docker ps --filter "name=$TR" --format '  {{.Names}} | {{.Status}} | {{.Image}}'
echo

echo "==================== 2. Startbefehl (Flags) ===================="
echo "Hier stehen die Entrypoints und Provider, falls sie als Flags gesetzt sind:"
docker inspect "$TR" --format '{{range .Args}}{{.}}{{"\n"}}{{end}}' 2>/dev/null | sed 's/^/  /'
echo

echo "==================== 3. Statische Konfigurationsdatei ===================="
echo "Suche traefik.yml / traefik.yaml im Container:"
FOUND=""
for p in /etc/traefik/traefik.yml /etc/traefik/traefik.yaml /traefik.yml /config/traefik.yml; do
  if docker exec "$TR" sh -c "test -f $p" 2>/dev/null; then
    FOUND="$p"
    echo "  Gefunden: $p"
  fi
done
if [ -z "$FOUND" ]; then
  echo "  Keine statische Konfigdatei gefunden (läuft dann rein über Flags)."
fi
echo

echo "==================== 4. Ist der DOCKER-PROVIDER aktiv? ===================="
echo "Das ist die entscheidende Frage — nur dann wirken Container-Labels."
DOCKERPROV="NEIN"
if docker inspect "$TR" --format '{{range .Args}}{{.}}{{"\n"}}{{end}}' 2>/dev/null | grep -q "providers.docker"; then
  DOCKERPROV="JA (als Flag)"
fi
if [ -n "$FOUND" ]; then
  if docker exec "$TR" sh -c "grep -A5 'providers:' $FOUND 2>/dev/null | grep -q docker" 2>/dev/null; then
    DOCKERPROV="JA (in $FOUND)"
  fi
fi
echo "  Docker-Provider: $DOCKERPROV"
echo

echo "==================== 5. Zertifikats-Resolver ===================="
RES=""
if [ -n "$FOUND" ]; then
  RES=$(docker exec "$TR" sh -c \
    "sed -n '/certificatesResolvers:/,/^[^ ]/p' $FOUND 2>/dev/null | grep -E '^  [a-zA-Z0-9_-]+:' | head -1 | tr -d ' :'" 2>/dev/null)
fi
if [ -z "$RES" ]; then
  RES=$(docker inspect "$TR" --format '{{range .Args}}{{.}}{{"\n"}}{{end}}' 2>/dev/null \
    | grep -oE "certificatesresolvers\.[a-zA-Z0-9_-]+" | head -1 | cut -d. -f2)
fi
echo "  Gefundener Resolver: ${RES:-KEINER GEFUNDEN}"
echo
echo "  --- Rohauszug certificatesResolvers (falls vorhanden) ---"
if [ -n "$FOUND" ]; then
  docker exec "$TR" sh -c "grep -A 12 'certificatesResolvers' $FOUND 2>/dev/null" | sed 's/^/  /'
fi
echo

echo "==================== 6. Entrypoints ===================="
if [ -n "$FOUND" ]; then
  docker exec "$TR" sh -c "sed -n '/entryPoints:/,/^[^ ]/p' $FOUND 2>/dev/null" | sed 's/^/  /'
fi
docker inspect "$TR" --format '{{range .Args}}{{.}}{{"\n"}}{{end}}' 2>/dev/null \
  | grep -i "entrypoints" | sed 's/^/  /'
echo

echo "==================== 7. Netze und Ports ===================="
echo "  Netzwerke:"
docker inspect "$TR" --format '{{range $k,$v := .NetworkSettings.Networks}}    {{$k}}{{"\n"}}{{end}}' 2>/dev/null
echo "  Veröffentlichte Ports:"
docker inspect "$TR" --format '{{range $p,$v := .NetworkSettings.Ports}}    {{$p}}{{"\n"}}{{end}}' 2>/dev/null
echo

echo "==================== 8. Vorhandene Labels anderer Container ===================="
echo "Zeigt, wie Traefik bei dir schon angesprochen wird (Vorbild):"
for c in $(docker ps --format '{{.Names}}'); do
  L=$(docker inspect "$c" --format '{{range $k,$v := .Config.Labels}}{{if eq $k "traefik.enable"}}{{$v}}{{end}}{{end}}' 2>/dev/null)
  if [ "$L" = "true" ]; then
    echo "  Container: $c"
    docker inspect "$c" --format '{{range $k,$v := .Config.Labels}}{{if eq (printf "%.7s" $k) "traefik"}}    {{$k}}={{$v}}{{"\n"}}{{end}}{{end}}' 2>/dev/null
  fi
done
echo

echo "==================== 9. Netzwerkliste ===================="
docker network ls --format '  {{.Name}} ({{.Driver}})'
echo
echo "==================== Ende der Diagnose ===================="
