# ── Étape 1 : Build du binaire Go ──────────────────────────────────────────
# Build context = core/backend/ (pas besoin du répertoire parent)
# Les modules viewLogs et viewServices sont clonés depuis Forgejo pendant le build.
FROM golang:1.26-alpine AS builder

RUN apk add --no-cache git ca-certificates

# Cloner les modules dans la même arborescence que les replace directives go.mod
# go.mod: replace ../../viewLogs  →  depuis /workspace/core/backend/ = /workspace/viewLogs ✓
RUN git clone https://git.geronzi.fr/proxmoxPanel/viewLogs    /workspace/viewLogs
RUN git clone https://git.geronzi.fr/proxmoxPanel/viewServices /workspace/viewServices

WORKDIR /workspace/core/backend

# Copier les fichiers de dépendances (optimise le cache Docker)
COPY go.mod go.sum ./

# Copier tout le code source du CORE
COPY . .

# Télécharger les dépendances
RUN go mod download

# Compiler le binaire de façon statique
# -ldflags="-s -w" : supprime les infos de debug pour réduire la taille
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
    go build -ldflags="-s -w" -o /bin/proxmoxpanel ./

# ── Étape 2 : Image finale minimale ────────────────────────────────────────
FROM alpine:3.20

# Certificats CA pour les requêtes HTTPS vers l'API Proxmox
RUN apk add --no-cache ca-certificates tzdata

# Créer un utilisateur non-root pour la sécurité
RUN addgroup -g 1001 pxp && adduser -u 1001 -G pxp -s /bin/sh -D pxp

WORKDIR /app

# Copier le binaire compilé
COPY --from=builder /bin/proxmoxpanel /app/proxmoxpanel

# Créer les répertoires de données avec les bonnes permissions
RUN mkdir -p /app/data && chown -R pxp:pxp /app

USER pxp

# Port d'écoute du backend
EXPOSE 3001

# Variables d'environnement par défaut
ENV DATA_DIR=/app/data \
    LISTEN_ADDR=:3001 \
    APP_ENV=production

CMD ["/app/proxmoxpanel"]
