# ============================================================================
# Javis Bot — all-in-one container
# VNC + XFCE desktop + Chrome + Python brain bridge + Node/bun Discord bot.
# Ollama (the LLM backend) runs as a separate service (see docker-compose.yml).
# ============================================================================
FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive \
    LANG=C.UTF-8 \
    DISPLAY=:1 \
    PATH=/opt/venv/bin:/root/.bun/bin:/usr/local/bin:/usr/bin:/bin

# --- System packages: desktop, VNC, Chrome deps, ffmpeg, python, ocr ---
RUN apt-get update && apt-get install -y --no-install-recommends \
      ca-certificates curl wget gnupg unzip procps \
      tigervnc-standalone-server tigervnc-common tigervnc-tools \
      xfce4 xfce4-goodies dbus-x11 x11-utils xfonts-base \
      fonts-noto-cjk fonts-noto-cjk-extra fonts-nanum \
      ffmpeg tesseract-ocr \
      python3 python3-venv python3-pip \
      novnc websockify supervisor gettext-base \
    && rm -rf /var/lib/apt/lists/*

# --- Google Chrome (stable) ---
RUN wget -q -O /tmp/chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
    && (apt-get update && apt-get install -y --no-install-recommends /tmp/chrome.deb || (apt-get -f install -y)) \
    && rm -f /tmp/chrome.deb && rm -rf /var/lib/apt/lists/*

# --- bun (Discord bot runtime/package manager) ---
RUN curl -fsSL https://bun.sh/install | bash

# --- Python brain/bridge deps (slim set) ---
COPY bridge/requirements-bridge.txt /app/bridge/requirements-bridge.txt
RUN python3 -m venv /opt/venv \
    && /opt/venv/bin/pip install --no-cache-dir --upgrade pip \
    && /opt/venv/bin/pip install --no-cache-dir -r /app/bridge/requirements-bridge.txt

# --- Discord bot deps (cache layer on lockfile) ---
COPY bot/package.json bot/bun.lock /app/bot/
RUN cd /app/bot && bun install --frozen-lockfile || bun install

# --- App source ---
COPY . /app
WORKDIR /app

# --- Default Piper voice (best-effort at build; entrypoint retries if absent) ---
RUN bash docker/download-piper.sh || true

EXPOSE 5901 6080 8765

ENTRYPOINT ["/app/docker/entrypoint.sh"]
