# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# Multi-stage build for Python SDK testing
FROM python:3.11-slim AS base

# Install system dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    curl \
    && rm -rf /var/lib/apt/lists/*

# Install Rust for maturin
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

# Set working directory
WORKDIR /workspace

# Copy dependency files first for better layer caching
COPY Cargo.toml Cargo.lock ./
COPY foreign/python/Cargo.toml ./foreign/python/
COPY foreign/python/pyproject.toml ./foreign/python/
COPY foreign/python/README.md ./foreign/python/
COPY foreign/python/LICENSE ./foreign/python/
COPY foreign/python/NOTICE ./foreign/python/

# Install build dependencies
WORKDIR /workspace/foreign/python
RUN pip install --no-cache-dir maturin

# Copy core dependencies (changes less frequently)
COPY core/ /workspace/core/

# Copy Python SDK source (changes more frequently)
COPY foreign/python/src/ ./src/

# Build Python SDK and install wheel
RUN maturin build
RUN find target/wheels/ -name "*.whl" -exec pip install {} \;

# Install test dependencies from pyproject.toml
RUN pip install --no-cache-dir -e ".[testing]"

# Copy test files
COPY foreign/python/tests/ ./tests/

# Create test script
COPY foreign/python/scripts/test.sh ./scripts/test.sh
RUN chmod +x ./scripts/test.sh

# Set environment variables
ENV PYTHONPATH=/workspace/foreign/python
ENV IGGY_SERVER_HOST=iggy-server
ENV IGGY_SERVER_TCP_PORT=8090

# Default command runs tests
CMD ["./scripts/test.sh"]
