FROM node:24-bookworm-slim

ENV DEBIAN_FRONTEND=noninteractive \
    PUPPETEER_CACHE_DIR=/opt/puppeteer \
    PUPPETEER_CHROME_HEADLESS_SHELL_SKIP_DOWNLOAD=true \
    PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1

RUN apt-get update \
 && apt-get install -y --no-install-recommends \
      ca-certificates \
      fonts-liberation \
      libasound2 \
      libatk-bridge2.0-0 \
      libatk1.0-0 \
      libcairo2 \
      libcups2 \
      libdbus-1-3 \
      libexpat1 \
      libfontconfig1 \
      libgbm1 \
      libglib2.0-0 \
      libgtk-3-0 \
      libnspr4 \
      libnss3 \
      libpango-1.0-0 \
      libpangocairo-1.0-0 \
      libx11-6 \
      libx11-xcb1 \
      libxcb1 \
      libxcomposite1 \
      libxdamage1 \
      libxext6 \
      libxfixes3 \
      libxkbcommon0 \
      libxrandr2 \
      python3 \
      python3-venv \
      supervisor \
      unzip \
 && rm -rf /var/lib/apt/lists/*

RUN groupadd --gid 1001 app \
 && useradd --uid 1001 --gid 1001 --create-home --shell /usr/sbin/nologin app \
 && python3 -m venv /opt/venv

WORKDIR /opt/endless

COPY api/requirements.txt api/requirements.txt
RUN /opt/venv/bin/pip install --no-cache-dir -r api/requirements.txt

COPY bot/package.json bot/package-lock.json bot/
RUN cd bot \
 && npm ci --omit=dev \
 && npm cache clean --force

COPY api api
COPY proxy proxy
COPY bot bot
COPY docker/supervisord.conf /etc/supervisor/conf.d/endless.conf
COPY docker/entrypoint.sh /usr/local/bin/endless-entrypoint

RUN chmod 0555 /usr/local/bin/endless-entrypoint

EXPOSE 3000

HEALTHCHECK --interval=10s --timeout=3s --start-period=20s --retries=3 \
  CMD node -e "fetch('http://127.0.0.1:3000/').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"

ENTRYPOINT ["/usr/local/bin/endless-entrypoint"]
