# NowYouSeeMe Docker Image
# Multi-stage build for optimized production image

# Stage 1: Build environment
FROM ubuntu:20.04 AS builder

# Set environment variables
ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1
ENV CUDA_HOME=/usr/local/cuda
ENV PATH=${CUDA_HOME}/bin:${PATH}
ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}

# Install system dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    cmake \
    git \
    wget \
    curl \
    pkg-config \
    libopencv-dev \
    libeigen3-dev \
    libboost-all-dev \
    libssl-dev \
    libffi-dev \
    python3 \
    python3-pip \
    python3-dev \
    python3-venv \
    && rm -rf /var/lib/apt/lists/*

# Install CUDA (if needed for GPU support)
# Uncomment the following lines if CUDA support is required
# RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb \
#     && dpkg -i cuda-keyring_1.0-1_all.deb \
#     && apt-get update \
#     && apt-get install -y cuda-toolkit-11-6

# Create virtual environment
RUN python3 -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

# Copy requirements and install Python dependencies
COPY requirements.txt /tmp/
RUN pip install --upgrade pip setuptools wheel
RUN pip install -r /tmp/requirements.txt

# Copy source code
COPY . /app/
WORKDIR /app

# Build C++ components
RUN chmod +x tools/build.sh
RUN ./tools/build.sh

# Stage 2: Runtime environment
FROM ubuntu:20.04 AS runtime

# Set environment variables
ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1
ENV PATH="/opt/venv/bin:$PATH"

# Install runtime dependencies
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    libopencv-core4.2 \
    libopencv-imgproc4.2 \
    libopencv-imgcodecs4.2 \
    libopencv-videoio4.2 \
    libopencv-highgui4.2 \
    libeigen3-dev \
    libboost-system1.71.0 \
    libboost-thread1.71.0 \
    libssl1.1 \
    libffi6 \
    && rm -rf /var/lib/apt/lists/*

# Copy virtual environment from builder
COPY --from=builder /opt/venv /opt/venv

# Copy built application
COPY --from=builder /app/build /app/build
COPY --from=builder /app/src /app/src
COPY --from=builder /app/tools /app/tools
COPY --from=builder /app/config /app/config
COPY --from=builder /app/docs /app/docs

# Create non-root user
RUN useradd -m -u 1000 nowyouseeme && \
    chown -R nowyouseeme:nowyouseeme /app

# Set working directory
WORKDIR /app

# Switch to non-root user
USER nowyouseeme

# Expose ports
EXPOSE 8080 8081 8082

# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD python3 -c "import sys; sys.exit(0)" || exit 1

# Default command
CMD ["python3", "src/ui/holodeck_ui.py"]

# Stage 3: Development environment (optional)
FROM runtime AS development

# Install development dependencies
USER root
RUN apt-get update && apt-get install -y \
    git \
    vim \
    gdb \
    valgrind \
    && rm -rf /var/lib/apt/lists/*

# Install development Python packages
RUN pip install \
    pytest \
    pytest-cov \
    black \
    flake8 \
    mypy \
    pylint

# Switch back to non-root user
USER nowyouseeme

# Development command
CMD ["bash"] 