# Automaker Docker Compose - Server Only (Development Mode)
# Runs only the backend API in a container for use with local Electron.
#
# Usage:
#   docker compose -f docker-compose.dev-server.yml up
#   Then run Electron locally which connects to http://localhost:3008
#
# This mode:
#   - Runs only the backend server in a container
#   - Mounts source code as volumes (live reload)
#   - Server runs with tsx watch for TypeScript changes
#   - Electron runs locally on host machine

services:
  # Development server (backend API only)
  server:
    build:
      context: .
      dockerfile: Dockerfile.dev
      args:
        # Match container user to host user for mounted volume permissions
        # Override with: UID=$(id -u) GID=$(id -g) docker-compose build
        UID: ${UID:-1001}
        GID: ${GID:-1001}
    container_name: automaker-dev-server-only
    restart: unless-stopped
    ports:
      - '3008:3008'
    environment:
      # Optional - Anthropic API key
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}

      # Optional - Claude CLI OAuth credentials
      - CLAUDE_OAUTH_CREDENTIALS=${CLAUDE_OAUTH_CREDENTIALS:-}

      # Optional - Cursor CLI OAuth token
      - CURSOR_AUTH_TOKEN=${CURSOR_AUTH_TOKEN:-}

      # Optional - authentication
      - AUTOMAKER_API_KEY=${AUTOMAKER_API_KEY:-}

      # Development settings
      - NODE_ENV=development
      - PORT=3008
      - CORS_ORIGIN=http://localhost:3007
      - HUSKY=0

      # Optional - restrict to specific directory within container
      - ALLOWED_ROOT_DIRECTORY=${ALLOWED_ROOT_DIRECTORY:-/projects}
      - DATA_DIR=/data

      # Internal - indicates containerized environment
      - IS_CONTAINERIZED=true
    volumes:
      # Mount source code for live reload
      - .:/app:cached

      # Use named volume for node_modules to avoid platform conflicts
      # This ensures native modules are built for the container's architecture
      - automaker-dev-node-modules:/app/node_modules

      # Persist data across restarts
      - automaker-data:/data

      # Persist CLI configurations
      - automaker-claude-config:/home/automaker/.claude
      - automaker-cursor-config:/home/automaker/.cursor

      # Note: Workspace mount (/projects) comes from docker-compose.override.yml

    # Install deps, build packages, then start server in watch mode
    # Note: We override the entrypoint to handle permissions properly
    entrypoint: /bin/sh
    command:
      - -c
      - |
        # Install as root to avoid permission issues with named volumes
        # Use --force to skip platform-specific devDependencies (dmg-license is macOS-only)
        echo 'Installing dependencies...' &&
        npm ci --legacy-peer-deps --force &&
        echo 'Building shared packages...' &&
        npm run build:packages &&

        # Fix permissions and start server as automaker user
        chown -R automaker:automaker /app/node_modules &&
        echo 'Starting server in development mode...' &&
        exec gosu automaker npm run _dev:server
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:3008/api/health']
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 60s

volumes:
  automaker-dev-node-modules:
    name: automaker-dev-node-modules
    # Named volume for container-specific node_modules

  automaker-data:
    name: automaker-data

  automaker-claude-config:
    name: automaker-claude-config

  automaker-cursor-config:
    name: automaker-cursor-config
