# ============================================================
# LangChain Website Chat Starter — Dockerfile
# Builds a single image that can serve the FastAPI REST API
# or the Streamlit UI (controlled by CMD / environment).
# ============================================================

FROM python:3.11-slim AS base

# Keeps Python output unbuffered (important for logs in containers)
ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    PIP_NO_CACHE_DIR=1 \
    PIP_DISABLE_PIP_VERSION_CHECK=1

WORKDIR /app

# --- System dependencies (lxml needs libxml2) ----------------
RUN apt-get update && apt-get install -y --no-install-recommends \
    libxml2 \
    libxslt1.1 \
    curl \
    && rm -rf /var/lib/apt/lists/*

# --- Python dependencies -------------------------------------
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# --- Application code ----------------------------------------
COPY . .

# Expose FastAPI port (Streamlit uses 8501 — override with docker run -p)
EXPOSE 8000
EXPOSE 8501

# Default: start FastAPI API server.
# Override CMD in docker run to switch to UI:
#   docker run ... python scripts/run.py ui
CMD ["python", "scripts/run.py", "api"]

# ============================================================
# Build & run examples:
#
# Build:
#   docker build -t website-chat .
#
# Run API (mount .env and a Chroma persist dir):
#   docker run --env-file .env \
#     -v $(pwd)/.chroma_db:/app/.chroma_db \
#     -p 8000:8000 website-chat
#
# Run Streamlit UI:
#   docker run --env-file .env \
#     -v $(pwd)/.chroma_db:/app/.chroma_db \
#     -p 8501:8501 website-chat \
#     python scripts/run.py ui
# ============================================================
