services:
  db:
    image: ${POSTGRES_IMAGE:-postgres:16-alpine}
    restart: unless-stopped
    environment:
      POSTGRES_DB: ss_tools
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    ports:
      - "${POSTGRES_HOST_PORT:-5432}:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d ss_tools"]
      interval: 10s
      timeout: 5s
      retries: 10

  backend:
    build:
      context: .
      dockerfile: docker/backend.Dockerfile
    restart: unless-stopped
    env_file:
      - ./backend/.env
    depends_on:
      db:
        condition: service_healthy
    environment:
      POSTGRES_URL: postgresql+psycopg2://postgres:postgres@db:5432/ss_tools
      DATABASE_URL: postgresql+psycopg2://postgres:postgres@db:5432/ss_tools
      TASKS_DATABASE_URL: postgresql+psycopg2://postgres:postgres@db:5432/ss_tools
      AUTH_DATABASE_URL: postgresql+psycopg2://postgres:postgres@db:5432/ss_tools
      BACKEND_PORT: 8000
      INITIAL_ADMIN_CREATE: ${INITIAL_ADMIN_CREATE:-false}
      INITIAL_ADMIN_USERNAME: ${INITIAL_ADMIN_USERNAME:-admin}
      INITIAL_ADMIN_PASSWORD: ${INITIAL_ADMIN_PASSWORD:-}
      FEATURES__DATASET_REVIEW: ${FEATURES__DATASET_REVIEW:-true}
      FEATURES__HEALTH_MONITOR: ${FEATURES__HEALTH_MONITOR:-true}
      LLM_CA_CERT_URLS: ${LLM_CA_CERT_URLS:-}
      LLM_SSL_VERIFY: ${LLM_SSL_VERIFY:-true}
    ports:
      - "${BACKEND_HOST_PORT:-8001}:8000"
    volumes:
      - ./storage:/app/storage

  agent:
    build:
      context: .
      dockerfile: docker/Dockerfile.agent
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
      backend:
        condition: service_started
    environment:
      LLM_API_KEY: ${LLM_API_KEY:-}
      LLM_BASE_URL: ${LLM_BASE_URL:-https://api.openai.com/v1}
      LLM_MODEL: ${LLM_MODEL:-gpt-4o}
      FASTAPI_URL: http://backend:8000
      JWT_SECRET: ${JWT_SECRET:-super-secret-key}
      SERVICE_JWT: ${SERVICE_JWT:-agent-service-secret}
      DATABASE_URL: postgresql+psycopg2://postgres:postgres@db:5432/ss_tools
      GRADIO_SERVER_PORT: 7860
    ports:
      - "7860"  # internal only, proxied through nginx

  frontend:
    build:
      context: .
      dockerfile: docker/frontend.Dockerfile
    restart: unless-stopped
    depends_on:
      - backend
    ports:
      - "${FRONTEND_HOST_PORT:-8000}:80"

volumes:
  postgres_data:
