# ===== Stage 1: Build dependencies =====
FROM python:3.12-slim AS builder

WORKDIR /app

# Install uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv

# Copy dependency manifests
COPY backend/pyproject.toml .
COPY backend/.env.example .

# Create venv and install deps
RUN uv venv /opt/venv && \
    uv pip install --python /opt/venv/bin/python \
        "fastapi>=0.104.0" \
        "uvicorn[standard]>=0.24.0" \
        "python-multipart>=0.0.6" \
        "langextract[all]>=0.1.0" \
        "langchain>=0.2.0" \
        "langchain-openai>=0.1.0" \
        "langgraph>=0.1.0" \
        "networkx>=3.0" \
        "python-dotenv>=1.0.0" \
        "requests>=2.31.0" \
        "beautifulsoup4>=4.12.0" \
        "python-jose[cryptography]>=3.3.0"

# ===== Stage 2: Runtime =====
FROM python:3.12-slim

WORKDIR /app

# Copy venv from builder
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

# Copy backend source
COPY backend/ ./backend/
# Copy mineru_mvp (used by indexing pipeline)
COPY mineru_mvp/ ./mineru_mvp/

# Create data directories
RUN mkdir -p /app/backend/data/uploads \
             /app/backend/data/jobs \
             /app/backend/data/kg \
             /app/backend/data/batches \
             /app/mineru_mvp/output

# Update paths for container environment
ENV MINERU_PYTHON=/opt/venv/bin/python
ENV MINERU_PIPELINE=/app/mineru_mvp/pipeline.py

EXPOSE 8000

WORKDIR /app/backend
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
