services:
  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    depends_on:
      - shuffleset
    ports:
      - "${HTTP_PORT:-8080}:80"
    environment:
      - SHUFFLESET_AUTH_USER=${SHUFFLESET_AUTH_USER:-}
      - SHUFFLESET_AUTH_HASH=${SHUFFLESET_AUTH_HASH:-}
    volumes:
      - caddy-data:/data
      - caddy-config:/config
    entrypoint: ["/bin/sh", "-c"]
    command:
      - |
        set -eu
        {
          echo ':80 {'
          echo '  encode zstd gzip'
          if [ -n "$$SHUFFLESET_AUTH_USER" ] && [ -n "$$SHUFFLESET_AUTH_HASH" ]; then
            echo '  basic_auth {'
            printf '    %s %s\n' "$$SHUFFLESET_AUTH_USER" "$$SHUFFLESET_AUTH_HASH"
            echo '  }'
          fi
          echo '  reverse_proxy shuffleset:8888'
          echo '}'
        } > /etc/caddy/Caddyfile
        caddy run --config /etc/caddy/Caddyfile --adapter caddyfile

  shuffleset:
    image: ${SHUFFLESET_IMAGE:-registry.noisefactor.io/shuffleset-selfhost:latest}
    restart: unless-stopped
    expose:
      - "8888"
    volumes:
      - ${AUDIO_DIR:-./audio}:/media/audio:ro
      - ${VIDEO_DIR:-./video}:/media/video:ro
      - hls-cache:/var/cache/hls
      - file-cache:/var/cache/shuffleset/files
    environment:
      - SHUFFLESET_MODE=selfhost
      - PORT=8888
      - AUDIO_DIR=/media/audio
      - VIDEO_DIR=/media/video
      - HLS_CACHE_DIR=/var/cache/hls
      - FILE_CACHE_DIR=/var/cache/shuffleset/files
      - SITE_URL=${SITE_URL:-http://localhost:8080}
      - MAX_CONCURRENT_ENCODES=${MAX_CONCURRENT_ENCODES:-2}
      - MAX_CACHE_SIZE_GB=${MAX_CACHE_SIZE_GB:-10}
    healthcheck:
      test: ["CMD", "python", "-c", "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://localhost:8888/up',timeout=3).status==200 else 1)"]
      interval: 30s
      timeout: 5s
      retries: 3

volumes:
  caddy-data:
  caddy-config:
  hls-cache:
  file-cache:
