version: '3.9'

services:
  readmeabook:
    build:
      context: .
      dockerfile: dockerfile.unified
    container_name: readmeabook-local
    restart: unless-stopped
    ports:
      - "3030:3030"
    volumes:
      # Application config and cache
      - ./config:/app/config
      - ./cache:/app/cache

      # Downloads and media directories
      - ./downloads:/downloads
      - ./media:/media

      # PostgreSQL data persistence
      - ./pgdata:/var/lib/postgresql/data

      # Redis data persistence
      - ./redis:/var/lib/redis

    environment:
      # ========================================================================
      # RECOMMENDED: User/Group ID Mapping (Hybrid Approach)
      # ========================================================================
      # Set these to match your host user for proper file ownership
      # Run 'id' on your host to find your UID and GID
      #
      # How it works:
      # - postgres user: Keeps UID 103 (PostgreSQL requirement), uses your PGID
      # - redis/node:    Fully remapped to your PUID:PGID
      #
      # File ownership on host:
      # - PostgreSQL data (/var/lib/postgresql/data): UID 103, GID <your-PGID>
      # - Everything else (/downloads, /media, /config): <your-PUID>:<your-PGID>
      #
      # For LXC: You only need to passthrough/map container UID 103
      # See documentation/deployment/unified.md for LXC examples
      #
      PUID: 1000
      PGID: 1000

      # ========================================================================
      # OPTIONAL: Secrets (auto-generated on first run if not provided)
      # ========================================================================
      # Uncomment and set these if you want to use custom secrets:
      # JWT_SECRET: "your-custom-jwt-secret-here"
      # JWT_REFRESH_SECRET: "your-custom-jwt-refresh-secret-here"
      # CONFIG_ENCRYPTION_KEY: "your-custom-encryption-key-here"
      # POSTGRES_PASSWORD: "your-custom-postgres-password-here"

      # ========================================================================
      # OPTIONAL: Application Configuration
      # ========================================================================
      # Only set these if you need non-default values:
      # POSTGRES_USER: "readmeabook"
      # POSTGRES_DB: "readmeabook"
      # PLEX_CLIENT_IDENTIFIER: "readmeabook-custom-id"
      # PLEX_PRODUCT_NAME: "ReadMeABook"
      # LOG_LEVEL: "info"

      # ========================================================================
      # IMPORTANT: Public URL Configuration
      # ========================================================================
      # Set this to your public URL if accessing from outside localhost:
      # PUBLIC_URL: "https://readmeabook.yourdomain.com"

    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3030/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s
