services:
  scraper:
    build: .
    image: kuh-no-bowls:latest
    container_name: kuh-no-bowls-scraper
    profiles: ["oneshot"]
    env_file: .env
    environment:
      LOG_PATH: /var/log/kuh-no-bowls/kuh-no-bowls.log
      TZ: America/New_York
    volumes:
      - knb_logs:/var/log/kuh-no-bowls
    networks:
      - services_net

  # Hourly Open-Meteo weather -> knoebels."LZ_open_meteo_hourly".
  # Oneshot, run from cron. Default mode does the recent sync; pass --backfill
  # once to load history: docker compose --profile oneshot run --rm weather --backfill
  weather:
    build: .
    image: kuh-no-bowls:latest
    container_name: kuh-no-bowls-weather
    profiles: ["oneshot"]
    entrypoint: ["python", "-u", "weather_logger.py"]
    env_file: .env
    environment:
      LOG_PATH: /var/log/kuh-no-bowls/weather.log
      TZ: America/New_York
    volumes:
      - knb_logs:/var/log/kuh-no-bowls
    networks:
      - services_net

  dashboard:
    build: .
    image: kuh-no-bowls:latest
    container_name: kuh-no-bowls-dashboard
    restart: unless-stopped
    env_file: .env
    entrypoint: ["streamlit", "run", "app.py", "--server.port=8502", "--server.address=0.0.0.0"]
    ports:
      - "8502:8502"
    volumes:
      - ./app.py:/app/app.py:ro
      - ./.streamlit:/app/.streamlit:ro
    healthcheck:
      test: ["CMD", "curl", "-fsS", "http://localhost:8502/_stcore/health"]
      interval: 30s
      timeout: 5s
      retries: 3
    networks:
      - services_net

volumes:
  knb_logs:

networks:
  services_net:
    external: true
