# ---------- Build stage ----------
FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS builder

WORKDIR /app

ENV UV_HTTP_TIMEOUT=300 \
    UV_LINK_MODE=copy \
    UV_COMPILE_BYTECODE=1

RUN apt-get update \
    && apt-get install -y --no-install-recommends nodejs npm ca-certificates \
    && rm -rf /var/lib/apt/lists/*

# Cache Python dependency resolution independently from source changes.
COPY pyproject.toml uv.lock ./
RUN uv sync \
    --frozen \
    --no-dev \
    --no-install-project \
    --no-cache-dir

WORKDIR /app/csg/infrastructure/parsing/internal/js_bridge
COPY csg/infrastructure/parsing/internal/js_bridge/package*.json ./
COPY csg/infrastructure/parsing/internal/js_bridge/.npmrc ./
RUN npm ci --omit=dev --ignore-scripts

WORKDIR /app
COPY csg/ /app/csg/
COPY README.md /app/README.md
COPY README-PACKAGE.md /app/README-PACKAGE.md
RUN uv sync \
    --frozen \
    --no-dev \
    --no-cache-dir


# ---------- Runtime stage ----------
FROM python:3.12-slim-bookworm AS runtime

WORKDIR /app

ENV PATH="/app/.venv/bin:$PATH" \
    PYTHONPATH="/app" \
    PYTHONUNBUFFERED=1 \
    CSG_DATA_DIR="/app/data" \
    CSG_MODEL_CACHE="/app/data/models"

RUN apt-get update \
    && apt-get install -y --no-install-recommends nodejs ca-certificates \
    && rm -rf /var/lib/apt/lists/* \
    && mkdir -p /app/csg/agent/logs /app/data/models

COPY --from=builder /app/.venv /app/.venv
COPY --from=builder /app/csg /app/csg

EXPOSE 8080

CMD ["uvicorn", "csg.presentation.web.app:app", "--host", "0.0.0.0", "--port", "8080"]
