# =============================================================================
# KubeDiagrams Backend - Dockerfile
# =============================================================================
# Base image from KubeDiagrams project (Philippe Merle)
# Includes: Helm, Graphviz, Python, PyYAML, diagrams
# =============================================================================

# --- Stage 1: Get Helm binary ---
FROM docker.io/alpine/helm:3 AS helm

# --- Stage 2: Build backend ---
FROM docker.io/python:3.13-alpine AS base

# Install system dependencies
RUN apk update && apk add --no-cache \
    graphviz \
    graphviz-dev \
    bash \
    ttf-freefont \
    curl \
    git \
    gcc \
    musl-dev \
    && rm -rf /var/cache/apk/*

# Install kubectl (statically compiled Go binary — works on Alpine/musl)
RUN ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') && \
    KUBECTL_VERSION=$(curl -fsSL https://dl.k8s.io/release/stable.txt) && \
    curl -fsSL -o /usr/local/bin/kubectl \
        "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/${ARCH}/kubectl" && \
    chmod +x /usr/local/bin/kubectl

# Copy Helm from first stage
COPY --from=helm /usr/bin/helm /usr/local/bin/helm

# Install Helmfile from GitHub releases (Alpine/musl version)
ARG HELMFILE_VERSION=1.2.3
RUN curl -fsSL -o /tmp/helmfile.tar.gz \
    "https://github.com/helmfile/helmfile/releases/download/v${HELMFILE_VERSION}/helmfile_${HELMFILE_VERSION}_linux_386.tar.gz" && \
    tar -xzf /tmp/helmfile.tar.gz -C /usr/local/bin helmfile && \
    chmod +x /usr/local/bin/helmfile && \
    rm /tmp/helmfile.tar.gz

# Set working directory
WORKDIR /app

# Copy requirements first (for Docker layer caching)
COPY requirements.txt .

# Install Python dependencies
RUN pip install --no-cache-dir --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt

# Copy backend application code
COPY . .

# Create logs directory
RUN mkdir -p logs && chmod 755 logs

# Environment variables
ENV FLASK_APP=app.py
ENV FLASK_ENV=production
ENV PYTHONUNBUFFERED=1
ENV BEHIND_PROXY=true
ENV PROXY_X_FOR=1

# Expose port
EXPOSE 5000

# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
    CMD curl --fail --silent http://localhost:5000/api/health || exit 1

CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "4", "--timeout", "120", "--access-logfile", "-", "--error-logfile", "-", "app:app"]
