# MoEngage MCP Server Dockerfile
# Production-ready container for remote MCP deployment

FROM python:3.12-slim AS builder

# Install uv for fast dependency management
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv

WORKDIR /app

# Copy dependency files first for better caching
COPY pyproject.toml uv.lock ./

# Install dependencies
RUN uv sync --frozen --no-dev --no-editable

# Copy source code
COPY src/ ./src/

# Install the package
RUN uv pip install --no-deps -e .

# Production stage
FROM python:3.12-slim AS production

WORKDIR /app

# Copy virtual environment from builder
COPY --from=builder /app/.venv /app/.venv
COPY --from=builder /app/src /app/src

# Set environment variables
ENV PATH="/app/.venv/bin:$PATH"
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1

# Create non-root user for security
RUN useradd --create-home --shell /bin/bash appuser
USER appuser

# Health check endpoint (MCP servers should respond to initialize)
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD python -c "import socket; s=socket.socket(); s.connect(('localhost', 8000)); s.close()" || exit 1

# Expose port for HTTP transport
EXPOSE 8000

# Default to HTTP transport for remote deployment
# Override with --transport stdio for local use
CMD ["python", "-m", "moengage_mcp.server", "--transport", "http", "--host", "0.0.0.0", "--port", "8000"]
