services:
  server:
    build:
      context: . # Baut mit Dockerfile im Root
    image: meldestelle/server:latest
    container_name: meldestelle-server
    restart: unless-stopped
    ports:
      - "8080:8081"
    environment:
      - DB_USER=${POSTGRES_USER}
      - DB_PASSWORD=${POSTGRES_PASSWORD}
      - DB_NAME=${POSTGRES_DB}
      - DB_HOST=db
      - DB_PORT=5432
    depends_on:
      db:
        condition: service_healthy
    networks:
      - meldestelle-net
    # PostgreSQL Datenbank (Service-Name 'db')
  db:
    image: postgres:16-alpine # Spezifische Version
    container_name: meldestelle-db
    restart: unless-stopped
    environment:
      # Liest Werte aus .env
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    # PGDATA nicht nötig, Standard verwenden
    volumes:
      # Benanntes Volume für Daten auf Standardpfad
      - postgres_data:/var/lib/postgresql/data
    networks:
      - meldestelle-net # <--- Muss zum Netzwerk-Namen passen
    healthcheck: # Wichtig für depends_on
      test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}" ] # Doppelte $$ beachten!
      interval: 10s
      timeout: 5s
      retries: 5
    ports: # Nur bei Bedarf freigeben, z.B. für lokalen Zugriff
      - "127.0.0.1:54321:5432" # Host-Port 54321 → Container-Port 5432

  # PgAdmin Service
  pgadmin:
    image: dpage/pgadmin4:latest # Oder spezifische Version
    container_name: meldestelle-pgadmin
    restart: unless-stopped
    environment:
      # Werte aus .env lesen (oder Defaults nutzen)
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-admin@example.com}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin_password_change_me} # UNBEDINGT IN .env SETZEN!
      PGADMIN_CONFIG_SERVER_MODE: 'False'
    volumes:
      - pgadmin_data:/var/lib/pgadmin # Benanntes Volume
    ports:
      # Port 5050 auf dem Host (nur localhost) → Port 80 im Container
      - "${PGADMIN_PORT:-127.0.0.1:5050}:80"
    networks:
      - meldestelle-net # <--- Muss zum Netzwerk-Namen passen
    depends_on: # PgAdmin braucht die DB
      - db

networks:
  meldestelle-net:
    driver: bridge
volumes:
  postgres_data: # <--- Konsistenter Name
  pgadmin_data:  # <--- Konsistenter Name
