# Stage 1: Builder environment
ARG BASE_IMAGE
FROM ${BASE_IMAGE} AS builder

ARG INDEX_URL

WORKDIR /app
COPY agent-studio ./agent-studio
COPY applications ./applications
COPY service ./service
COPY foundation ./foundation

RUN sed -i '/"openjiuwen-studio==/d' /app/applications/lowcode_agent/pyproject.toml
RUN sed -i '/"openjiuwen-runtime-service==/d' /app/applications/lowcode_agent/pyproject.toml
RUN sed -i '/"openjiuwen-runtime-foundation==/d' /app/service/pyproject.toml

RUN pip install uv -i ${INDEX_URL}
RUN sed -i "s#url = \"[^\"]*\"#url = \"${INDEX_URL}\"#g" /app/agent-studio/backend/pyproject.toml
RUN sed -i "s#url = \"[^\"]*\"#url = \"${INDEX_URL}\"#g" /app/applications/lowcode_agent/pyproject.toml
RUN sed -i "s#url = \"[^\"]*\"#url = \"${INDEX_URL}\"#g" /app/service/pyproject.toml
RUN sed -i "s#url = \"[^\"]*\"#url = \"${INDEX_URL}\"#g" /app/foundation/pyproject.toml

WORKDIR /app/agent-studio/backend 
RUN uv sync --group dev 
RUN uv build --out-dir /app/dist

WORKDIR /app/applications/lowcode_agent
RUN uv sync --group dev
RUN uv build --out-dir /app/dist

WORKDIR /app/service
RUN uv sync --group dev
RUN uv build --out-dir /app/dist

WORKDIR /app/foundation
RUN uv sync --group dev
RUN uv build --out-dir /app/dist

# Stage 2: Final image - Only copy necessary files from builder stage
ARG BASE_IMAGE
FROM ${BASE_IMAGE} AS runtime

ARG STUDIO_VERSION
ARG LOWCODE_AGENT_VERSION
ARG RUNTIME_SERVICE_VERSION
ARG RUNTIME_FOUNDATION_VERSION
ARG INDEX_URL

RUN mkdir -p /app/dist

COPY --from=builder /app/dist/openjiuwen_studio-${STUDIO_VERSION}-py3-none-any.whl /app/dist
COPY --from=builder /app/dist/lowcode_agent_runner-${LOWCODE_AGENT_VERSION}-py3-none-any.whl /app/dist
COPY --from=builder /app/dist/openjiuwen_runtime_service-${RUNTIME_SERVICE_VERSION}-py3-none-any.whl /app/dist
COPY --from=builder /app/dist/openjiuwen_runtime_foundation-${RUNTIME_FOUNDATION_VERSION}-py3-none-any.whl /app/dist


# 当多个包共用同一个根目录 openjiuwen_runtime,不能用pip install: 因为 pip (旧工具)有一个致命 BUG(针对 --target 安装)当目录已存在时,pip 会直接把整个目录删掉,再重新创建!
# 必须要用uv(新一代 Python 包管理器),专门修复了这个 bug,安装共享目录包时,只新增 / 覆盖文件,绝不删除整个目录

RUN pip install uv -i ${INDEX_URL}
RUN uv pip install /app/dist/openjiuwen_studio-${STUDIO_VERSION}-py3-none-any.whl --index-url ${INDEX_URL} --target=/app/site-packages
RUN uv pip install /app/dist/lowcode_agent_runner-${LOWCODE_AGENT_VERSION}-py3-none-any.whl --index-url ${INDEX_URL} --target=/app/site-packages
RUN uv pip install /app/dist/openjiuwen_runtime_service-${RUNTIME_SERVICE_VERSION}-py3-none-any.whl --index-url ${INDEX_URL} --target=/app/site-packages
RUN uv pip install /app/dist/openjiuwen_runtime_foundation-${RUNTIME_FOUNDATION_VERSION}-py3-none-any.whl --index-url ${INDEX_URL} --target=/app/site-packages

EXPOSE 8090

HEALTHCHECK --interval=30s --timeout=30s --start-period=30s --retries=5 \
    CMD curl -f http://localhost:8090/health || exit 1

WORKDIR /app/
ENV PYTHONPATH=/app/site-packages/openjiuwen_runtime:/app/site-packages
CMD ["python", "-m", "openjiuwen_runtime.examples.lowcode_agent", "--host", "0.0.0.0", "--port", "8090", "--irpath", "/app/ir.json"]