FROM node:22-bookworm-slim

COPY --from=ghcr.io/astral-sh/uv:0.12.6 /uv /usr/local/bin/uv

ENV NODE_ENV=production \
    PORT=8790 \
    HOST=0.0.0.0 \
    NODE_OPTIONS=--dns-result-order=ipv4first \
    TOTAL_TOKKI_BROWSER=/usr/bin/chromium \
    TOTAL_TOKKI_DOWNLOADS=/app/downloads \
    UV_PYTHON_INSTALL_DIR=/opt/uv/python \
    UV_CACHE_DIR=/opt/uv/cache

RUN apt-get update \
    && apt-get install -y --no-install-recommends chromium ca-certificates curl ffmpeg fonts-noto-cjk \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev --no-audit --no-fund
COPY . .
RUN uv python install 3.14 \
    && uv sync --project antibot --no-dev --locked \
    && /app/antibot/.venv/bin/python -m playwright install-deps firefox \
    && /app/antibot/.venv/bin/python -m camoufox fetch \
    && uv cache clean \
    && rm -rf /var/lib/apt/lists/*
RUN mkdir -p /app/data /app/downloads/webtoon /app/downloads/manga /app/downloads/novel /app/downloads/ani /app/downloads/media /app/downloads/temp /app/custom-cards /app/reader-fonts /app/reader-backgrounds

EXPOSE 8790
VOLUME ["/app/data", "/app/downloads", "/app/custom-cards", "/app/reader-fonts", "/app/reader-backgrounds"]
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 CMD node -e "const tls=!!process.env.TOTAL_TOKKI_TLS_CERT;const mod=require(tls?'node:https':'node:http');mod.get({hostname:'127.0.0.1',port:8790,path:'/api/health',rejectUnauthorized:false},r=>process.exit(r.statusCode===200?0:1)).on('error',()=>process.exit(1))"
CMD ["node", "server.mjs"]
