# M7: упаковка в docker-compose — API, PostgreSQL, фронт (nginx), Ollama + модель.
# Настройки читаются из .env в корне репо (шаблон — .env.example).
services:
  db:
    image: postgres:17-alpine
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-gntodo}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-gntodo}
      POSTGRES_DB: ${POSTGRES_DB:-gntodo}
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-gntodo}"]
      interval: 5s
      timeout: 3s
      retries: 12

  ollama:
    image: ollama/ollama:latest
    volumes:
      - ollama:/root/.ollama
    healthcheck:
      test: ["CMD-SHELL", "ollama ls >/dev/null 2>&1"]
      interval: 10s
      timeout: 5s
      retries: 12

  # Одноразовая загрузка модели (idempotent: pull обновляет, если уже есть)
  ollama-init:
    image: ollama/ollama:latest
    depends_on:
      ollama:
        condition: service_healthy
    environment:
      OLLAMA_HOST: http://ollama:11434
    command: ["ollama", "pull", "${OLLAMA_MODEL:-qwen2.5:3b}"]
    restart: "no"

  api:
    build: ./backend
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
      ollama-init:
        condition: service_completed_successfully
    environment:
      DATABASE_URL: postgresql+psycopg://${POSTGRES_USER:-gntodo}:${POSTGRES_PASSWORD:-gntodo}@db:5432/${POSTGRES_DB:-gntodo}
      GAUTH_BASE_URL: ${GAUTH_BASE_URL}
      GAUTH_CLIENT_ID: ${GAUTH_CLIENT_ID}
      GAUTH_CLIENT_SECRET: ${GAUTH_CLIENT_SECRET}
      GAUTH_REDIRECT_URI: ${GAUTH_REDIRECT_URI}
      SESSION_SECRET: ${SESSION_SECRET}
      OLLAMA_BASE_URL: http://ollama:11434
      OLLAMA_MODEL: ${OLLAMA_MODEL:-qwen2.5:3b}
      MCP_TOKEN: ${MCP_TOKEN:-}
      ATTACHMENTS_PATH: /data/attachments
    volumes:
      - attachments:/data/attachments
    expose:
      - "8134"

  web:
    build: ./frontend
    restart: unless-stopped
    depends_on:
      - api
    ports:
      - "${WEB_PORT:-8135}:80"

volumes:
  pgdata:
  attachments:
  ollama: