networks:
  infoscreen-net:
    driver: bridge

services:
  proxy:
    image: nginx:1.25
    container_name: infoscreen-proxy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./certs:/etc/nginx/certs:ro
      # Mount host media folder into nginx so it can serve uploaded media
      - ./server/media/:/opt/infoscreen/server/media/:ro
    depends_on:
      - server
      - dashboard
    networks:
      - infoscreen-net

  db:
    image: mariadb:11.2
    container_name: infoscreen-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASSWORD}
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - infoscreen-net
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 30s

  mqtt:
    image: eclipse-mosquitto:2.0.21
    container_name: infoscreen-mqtt
    restart: unless-stopped
    volumes:
      - ./mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf:ro
    ports:
      - "1883:1883"
      - "9001:9001"
    networks:
      - infoscreen-net
    healthcheck:
      test: ["CMD-SHELL", "mosquitto_pub -h localhost -t test -m 'health' || exit 1"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s

  # Verwende fertige Images statt Build
  server:
    image: ghcr.io/robbstarkaustria/infoscreen-api:latest
    container_name: infoscreen-api
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
      mqtt:
        condition: service_healthy
    environment:
      DB_CONN: "mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME}"
      DB_USER: ${DB_USER}
      DB_PASSWORD: ${DB_PASSWORD}
      DB_NAME: ${DB_NAME}
      DB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      DB_HOST: db
      FLASK_ENV: production
      FLASK_SECRET_KEY: ${FLASK_SECRET_KEY}
      MQTT_BROKER_URL: mqtt://mqtt:1883
      MQTT_USER: ${MQTT_USER}
      MQTT_PASSWORD: ${MQTT_PASSWORD}
      DEFAULT_SUPERADMIN_USERNAME: ${DEFAULT_SUPERADMIN_USERNAME:-superadmin}
      DEFAULT_SUPERADMIN_PASSWORD: ${DEFAULT_SUPERADMIN_PASSWORD}
    networks:
      - infoscreen-net
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 40s
    command: >
      bash -c "alembic -c /app/server/alembic.ini upgrade head &&
               python /app/server/init_defaults.py &&
               exec gunicorn server.wsgi:app --bind 0.0.0.0:8000"

  dashboard:
    image: ghcr.io/robbstarkaustria/infoscreen-dashboard:latest  # Oder wo auch immer Ihre Images liegen
    container_name: infoscreen-dashboard
    restart: unless-stopped
    depends_on:
      server:
        condition: service_healthy
    environment:
      NODE_ENV: production
      VITE_API_URL: ${API_URL}
    networks:
      - infoscreen-net

  listener:
    image: ghcr.io/robbstarkaustria/infoscreen-listener:latest  # Oder wo auch immer Ihre Images liegen
    container_name: infoscreen-listener
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
      mqtt:
        condition: service_healthy
    environment:
      DB_CONN: "mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME}"
      DB_USER: ${DB_USER}
      DB_PASSWORD: ${DB_PASSWORD}
      DB_NAME: ${DB_NAME}
      DB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
    networks:
      - infoscreen-net

  scheduler:
    image: ghcr.io/robbstarkaustria/infoscreen-scheduler:latest
    container_name: infoscreen-scheduler
    restart: unless-stopped
    depends_on:
      # HINZUGEFÜGT: Stellt sicher, dass die DB vor dem Scheduler startet
      db:
        condition: service_healthy
      mqtt:
        condition: service_healthy
    environment:
      # HINZUGEFÜGT: Datenbank-Verbindungsstring
      DB_CONN: "mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME}"
      MQTT_PORT: 1883
    networks:
      - infoscreen-net

volumes:
  db-data:
