services:
  sf:
    build:
      context: .                        # Build context is the docker/ directory
      dockerfile: Dockerfile.sandbox    # Runtime sandbox image with entrypoint
      args:
        SF_VERSION: latest             # Pin a specific version: SF_VERSION=2.51.0

    container_name: sf-sandbox

    ports:
      - "3000:3000"                     # SF web UI

    volumes:
      - ../:/workspace                  # Project root mounted into the container
      - sf-state:/home/sf/.sf        # Persistent SF state across restarts
      # - ~/.ssh:/home/sf/.ssh:ro      # SSH keys for git operations (read-only)
      # - ~/.gitconfig:/home/sf/.gitconfig:ro  # Host git config

    env_file:
      - .env                            # API keys and secrets (see .env.example)

    environment:
      - NODE_ENV=development
      # UID/GID remapping — match your host user to avoid permission issues
      # on bind-mounted volumes. The entrypoint remaps the container's sf
      # user to these IDs at startup. Run `id -u` / `id -g` to find yours.
      - PUID=1000
      - PGID=1000
      # Git identity inside the container (overrides .env if set here)
      # - GIT_AUTHOR_NAME=Your Name
      # - GIT_AUTHOR_EMAIL=you@example.com

    stdin_open: true                    # Keep stdin open for interactive use
    tty: true                           # Allocate a pseudo-TTY

    # Health check — verify SF is installed and responsive
    healthcheck:
      test: ["CMD", "sf", "--version"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s

    # Resource limits — uncomment to constrain container resources
    # deploy:
    #   resources:
    #     limits:
    #       cpus: "4.0"
    #       memory: 8G
    #     reservations:
    #       cpus: "1.0"
    #       memory: 2G

    # Network mode — uncomment ONE if you need host networking
    # network_mode: host               # Full host network access (no port mapping needed)
    # network_mode: bridge             # Default Docker bridge (already the default)

volumes:
  sf-state:
    driver: local
