ARG PYTHON_BASE_IMAGE=python:3.12-slim

FROM ghcr.io/astral-sh/uv:0.11.2 AS uv-tool
FROM ${PYTHON_BASE_IMAGE} AS builder
COPY --from=uv-tool /uv /usr/local/bin/uv
ENV UV_PROJECT_ENVIRONMENT=/opt/venv \
    UV_PYTHON_DOWNLOADS=never \
    UV_LINK_MODE=copy
WORKDIR /workspace
COPY . /workspace/
ARG ARTIFACT_BACKEND=redis
RUN case "$ARTIFACT_BACKEND" in \
        redis) set -- ;; \
        s3) set -- --extra s3 ;; \
        *) echo "Unsupported ARTIFACT_BACKEND: $ARTIFACT_BACKEND" >&2; exit 1 ;; \
    esac && \
    uv sync --locked --no-default-groups --no-editable \
        --python /usr/local/bin/python "$@" \
        --package nlalpha-data \
        --package nlalpha-tushare \
    && uv pip check --python /opt/venv/bin/python

FROM ${PYTHON_BASE_IMAGE} AS runtime
RUN apt-get update && apt-get install -y --no-install-recommends libstdc++6 libgomp1 && \
    rm -rf /var/lib/apt/lists/* && \
    groupadd -r appuser && useradd -r -g appuser appuser
WORKDIR /app
COPY --from=builder /opt/venv /opt/venv
RUN mkdir -p /app/workspace/cache /app/workspace/data && \
    chown -R appuser:appuser /app/workspace
ENV PATH="/opt/venv/bin:${PATH}" \
    NLALPHA_HOST=0.0.0.0 \
    NLALPHA_PORT=8000 \
    PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1
USER appuser
EXPOSE 8000
HEALTHCHECK --interval=10s --timeout=5s --start-period=10s --retries=3 \
    CMD python -c "import os, urllib.request; urllib.request.urlopen('http://127.0.0.1:' + os.environ['NLALPHA_PORT'] + '/ready', timeout=4)"
CMD ["python", "-m", "nlalpha_data.server"]
