# syntax=docker/dockerfile:1.6
# iLSP — multi-stage: downloads Bicep LS, then builds the Python package
# Final image: dotnet runtime + Python 3.12

# ── Stage 1: download Bicep Language Server ──────────────────────────────────
FROM debian:bookworm-slim AS bicep-downloader

ARG BICEP_VERSION=latest
RUN apt-get update && apt-get install -y --no-install-recommends curl unzip ca-certificates \
    && rm -rf /var/lib/apt/lists/*

COPY scripts/download_bicep_ls.sh /scripts/
RUN chmod +x /scripts/download_bicep_ls.sh && BICEP_VERSION=${BICEP_VERSION} /scripts/download_bicep_ls.sh


# ── Stage 2: Python wheel build ───────────────────────────────────────────────
FROM python:3.12-slim AS builder

WORKDIR /build
COPY pyproject.toml .
COPY ilsp/ ilsp/

RUN pip install --upgrade pip build \
    && python -m build --wheel --outdir /dist


# ── Stage 3: final runtime ────────────────────────────────────────────────────
# Use Microsoft's official .NET runtime image — avoids the SHA1-signed APT key
# issue on newer Debian hosts (trixie+ rejects packages.microsoft.com GPG since 2026-02-01).
FROM mcr.microsoft.com/dotnet/runtime:8.0

# Install Python 3 + pip (the dotnet base image is Debian bookworm)
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        python3 python3-pip wget \
    && rm -rf /var/lib/apt/lists/*

# Copy Bicep Language Server (baked in at build time — no volume needed)
COPY --from=bicep-downloader /opt/bicep-langserver /opt/bicep-langserver

# Install Python package and dependencies
COPY --from=builder /dist/*.whl /tmp/
RUN pip3 install --no-cache-dir --break-system-packages /tmp/*.whl && rm /tmp/*.whl

# Configuration defaults (override via Nomad env)
ENV PYTHON_LSP_PORT=2087 \
    BICEP_LSP_PORT=2088 \
    HEALTH_PORT=2089 \
    BICEP_LS_PATH=/opt/bicep-langserver/Bicep.LangServer.dll \
    DEVOPS_MCP_URL=https://devops-mcp.i80.dk \
    PYTHONUNBUFFERED=1

EXPOSE 2087 2088 2089

HEALTHCHECK --interval=15s --timeout=5s --retries=3 \
    CMD wget -qO- http://localhost:${HEALTH_PORT}/health || exit 1

CMD ["ilsp"]
