services:
  app:
    build:
      context: .
      dockerfile: ./be/docker/common/unified/Dockerfile
      args:
        ENV: staging
      platforms:
        - linux/amd64
        - linux/arm64
    image: sutera-app-staging:latest
    container_name: sutera-app-staging
    restart: unless-stopped
    ports:
      - "${APP_PORT:-80}:80"
      - "${HTTPS_PORT:-443}:443"
    environment:
      - APP_ENV=staging
      - APP_DEBUG=true
      - DB_HOST=postgres
      - DB_PORT=${DB_PORT:-5432}
      - DB_DATABASE=${DB_DATABASE}
      - DB_USERNAME=${DB_USERNAME}
      - DB_PASSWORD=${DB_PASSWORD}
      - REDIS_HOST=redis
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - CACHE_DRIVER=redis
      - SESSION_DRIVER=redis
      - QUEUE_CONNECTION=redis
    volumes:
      - app-storage-staging:/var/www/storage
      - app-logs-staging:/var/www/storage/logs
      - /etc/letsencrypt/live/sutera.koppkb.com/fullchain.pem:/etc/nginx/ssl/fullchain.pem:ro
      - /etc/letsencrypt/live/sutera.koppkb.com/privkey.pem:/etc/nginx/ssl/privkey.pem:ro
    networks:
      - sutera-staging-network
    depends_on:
      redis:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  # Redis for caching and sessions
  redis:
    image: redis:8.2-alpine
    container_name: sutera-redis-staging
    restart: unless-stopped
    volumes:
      - redis-data-staging:/data
      - ./redis-config/redis.conf:/usr/local/etc/redis/redis.conf:ro
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - sutera-staging-network
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 10s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  # Optional: Database (only if you want to run DB on same server for staging)
  # Uncomment if you want to run MySQL on the same server for staging
  postgres:
    image: postgres:17
    container_name: sutera-postgres-staging
    restart: unless-stopped
    ports:
      - "${DB_PORT:-5432}:5432"
    environment:
      - POSTGRES_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
      - POSTGRES_DATABASE=${DB_DATABASE}
      - POSTGRES_USER=${DB_USERNAME}
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    volumes:
      - postgres-data-staging:/var/lib/postgres
      - ./be/docker/postgres/conf.d:/etc/postgres/conf.d:ro
    networks:
      - sutera-staging-network
    healthcheck:
      test: ["CMD", "postgres", "ping", "-h", "localhost"]
      interval: 15s
      timeout: 10s
      retries: 5
      start_period: 30s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

networks:
  sutera-staging-network:
    driver: bridge

volumes:
  app-storage-staging:
    driver: local
  app-logs-staging:
    driver: local
  redis-data-staging:
    driver: local
  postgres-data-staging:
    driver: local
