# syntax=docker/dockerfile:1.7
FROM debian:bullseye-slim AS ifind-libidn

RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends libidn11 && \
    mkdir -p /opt/ifind-libs && \
    find /lib /usr/lib -name 'libidn.so.11*' \
      -exec cp -a {} /opt/ifind-libs/ \; && \
    test -e /opt/ifind-libs/libidn.so.11 && \
    rm -rf /var/lib/apt/lists/*

FROM python:3.10-slim-bookworm AS insight-runtime

ENV LD_LIBRARY_PATH=/usr/local/lib/python3.10/site-packages/insight_python/com/libs/linux/python310 \
    PIP_DEFAULT_TIMEOUT=120 \
    PIP_DISABLE_PIP_VERSION_CHECK=1 \
    PIP_RETRIES=20

COPY deploy/insight-runtime-requirements.txt ./deploy/insight-runtime-requirements.txt
COPY src/ashare_market/installers/insight_sdk.py ./deploy/install-insight-sdk.py

RUN --mount=type=cache,target=/root/.cache/pip \
    python -m pip install -r deploy/insight-runtime-requirements.txt && \
    python deploy/install-insight-sdk.py

FROM python:3.11-slim-bookworm

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    ASHARE_MARKET_INSIGHT_PYTHON=/usr/local/bin/python3.10 \
    LD_LIBRARY_PATH=/usr/local/lib/python3.11/site-packages/iFinDAPI/Linux/bin64:/usr/local/lib/python3.10/site-packages/insight_python/com/libs/linux/python310

WORKDIR /app

COPY --from=ifind-libidn /opt/ifind-libs/ /usr/local/lib/
COPY --from=insight-runtime /usr/local/bin/python3.10 /usr/local/bin/python3.10
COPY --from=insight-runtime /usr/local/lib/python3.10/ /usr/local/lib/python3.10/
COPY --from=insight-runtime /usr/local/lib/libpython3.10.so.1.0 /usr/local/lib/

RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
      libgcc-s1 \
      libncurses6 \
      libstdc++6 \
      zlib1g && \
    ldconfig && \
    rm -rf /var/lib/apt/lists/*

COPY deploy/runtime-requirements.txt ./deploy/runtime-requirements.txt

RUN --mount=type=cache,target=/root/.cache/pip \
    python -m pip install -r deploy/runtime-requirements.txt

COPY pyproject.toml ./
COPY README.md MANIFEST.in ./
COPY src ./src
COPY deploy ./deploy
COPY docs ./docs

RUN --mount=type=cache,target=/root/.cache/pip \
    python -m pip install --no-build-isolation --no-deps .

RUN python -m ashare_market.providers.ifind_native && \
    /usr/local/bin/python3.10 -c \
      "from insight_python.com.insight import common; from insight_python.com.insight.query import get_kline"

RUN useradd --create-home --uid 10001 ashare

USER ashare

EXPOSE 8020

CMD ["ashare-market", "serve", "--host", "0.0.0.0", "--port", "8020"]
