# services/vscode/Dockerfile
#
# VS Code Web (code-server) z preinstalowanymi rozszerzeniami proxym:
#   - Roo Code (asystent AI)
#   - Continue.dev (alternatywny asystent)
#   - Python, Ruff (backend)
#   - GitLens, Git Graph (git)
#   - REST Client (testowanie API)
#   - YAML, TOML, dotenv (pliki konfiguracyjne)
#
# Bazowy obraz: codercom/code-server (oficjalny, aktywnie utrzymywany)

FROM codercom/code-server:latest

# ── Metadane ────────────────────────────────────────────────
LABEL maintainer="proxym"
LABEL description="VS Code Web z preinstalowanym Roo Code i konfiguracją proxym"

# ── Zmienne środowiskowe z domyślnymi wartościami ────────────
ENV PROXYM_API_BASE=http://proxym:4000/v1 \
    PROXYM_API_KEY=sk-proxym-changeme \
    VSCODE_MODEL_CODE=balanced \
    VSCODE_MODEL_ARCHITECT=free \
    VSCODE_MODEL_DEBUG=cheap \
    VSCODE_MODEL_ASK=free \
    VSCODE_MODEL_OPUS=premium \
    WORKSPACE_NAME=proxym

# ── Instaluj python3 (potrzebne dla rozszerzeń Python + entrypoint) ──
USER root
RUN apt-get update -qq \
    && apt-get install -y --no-install-recommends python3 python3-pip \
    && rm -rf /var/lib/apt/lists/*
USER coder

# ── Kopiuj pliki konfiguracyjne ──────────────────────────────
COPY extensions.txt   /tmp/extensions.txt
COPY entrypoint.sh    /usr/local/bin/entrypoint.sh
COPY login.html       /usr/local/bin/login.html

USER root
RUN chmod +x /usr/local/bin/entrypoint.sh
USER coder

# ── Preinstaluj rozszerzenia w czasie budowania obrazu ───────
# Dzięki temu pierwszy start jest szybki — rozszerzenia nie pobierają się
# przy każdym uruchomieniu. Ignorujemy błędy marketplace (niektóre mogą
# nie być dostępne w Open VSX).
RUN while IFS= read -r ext || [ -n "$ext" ]; do \
      ext="$(echo "$ext" | sed 's/#.*//' | xargs)"; \
      [ -z "$ext" ] && continue; \
      echo "Installing: $ext"; \
      code-server --install-extension "$ext" --force 2>&1 \
        | grep -E "(Installing|installed|error|Error)" || true; \
    done < /tmp/extensions.txt

EXPOSE 8080

# entrypoint.sh generuje settings.json z env vars, potem startuje code-server
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
