services:
  couchdb:
    image: couchdb:3.3
    container_name: adopt-a-street-couchdb
    ports:
      - "5984:5984"
      - "4369:4369"
      - "9100:9100"
    environment:
      - COUCHDB_USER=${COUCHDB_USER:-admin}
      - COUCHDB_PASSWORD=${COUCHDB_PASSWORD:-admin}
      - COUCHDB_SECRET=${COUCHDB_SECRET:-change-this-secret-string}
      - ERL_FLAGS=+K true +A 4
    volumes:
      - couchdb_data:/opt/couchdb/data
      - ./couchdb/local.d:/opt/couchdb/etc/local.d
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5984/_up"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  couchdb-exporter:
    image: gesellix/couchdb-exporter:latest
    container_name: adopt-a-street-couchdb-exporter
    ports:
      - "9100:9100"
    environment:
      - COUCHDB_URL=http://localhost:5984
      - COUCHDB_USER=${COUCHDB_USER:-admin}
      - COUCHDB_PASSWORD=${COUCHDB_PASSWORD:-admin}
    depends_on:
      couchdb:
        condition: service_healthy
    restart: unless-stopped

  backend:
    image: ${DOCKER_REGISTRY:-your-registry}/adopt-a-street-backend:${TAG:-latest}
    build:
      context: ./backend
      dockerfile: Dockerfile
      platforms:
        - linux/amd64
        - linux/arm64
    container_name: adopt-a-street-backend
    ports:
      - "5000:5000"
    environment:
      - COUCHDB_URL=${COUCHDB_URL:-http://couchdb:5984}
      - COUCHDB_DB_NAME=${COUCHDB_DB_NAME:-adopt-a-street}
      - COUCHDB_USER=${COUCHDB_USER:-admin}
      - COUCHDB_PASSWORD=${COUCHDB_PASSWORD:-admin}
      - JWT_SECRET=${JWT_SECRET:-change-this-jwt-secret-key}
      - PORT=${PORT:-5000}
      - NODE_ENV=${NODE_ENV:-development}
      - FRONTEND_URL=${FRONTEND_URL:-http://localhost:3000}
      - CLOUDINARY_CLOUD_NAME=${CLOUDINARY_CLOUD_NAME}
      - CLOUDINARY_API_KEY=${CLOUDINARY_API_KEY}
      - CLOUDINARY_API_SECRET=${CLOUDINARY_API_SECRET}
      - STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
      - STRIPE_PUBLISHABLE_KEY=${STRIPE_PUBLISHABLE_KEY}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
    volumes:
      - ./backend/uploads:/app/uploads
    depends_on:
      couchdb:
        condition: service_healthy
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5000/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  frontend:
    image: ${DOCKER_REGISTRY:-your-registry}/adopt-a-street-frontend:${TAG:-latest}
    build:
      context: ./frontend
      dockerfile: Dockerfile
      platforms:
        - linux/amd64
        - linux/arm64
    container_name: adopt-a-street-frontend
    ports:
      - "3000:80"
    environment:
      - REACT_APP_API_URL=http://localhost:5000
    depends_on:
      backend:
        condition: service_healthy
    restart: unless-stopped
    healthcheck:
      test:
        [
          "CMD",
          "wget",
          "--quiet",
          "--tries=1",
          "--spider",
          "http://localhost:80",
        ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

volumes:
  couchdb_data:
    driver: local

networks:
  default:
    name: adopt-a-street-network
