# ── Étape 1 : Build du binaire Go ──────────────────────────────────────────
# Build context = core/backend/ (context: ./backend dans docker-compose.yml)
# ARG MODULES : IDs des modules à compiler, séparés par des virgules (ex: "viewLogs,viewServices")
FROM golang:1.26-alpine AS builder

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

ARG MODULES=""
ENV MODULES=${MODULES}

WORKDIR /workspace/core/backend

# Copier les sources du CORE (build context = backend/)
COPY go.mod go.sum ./
COPY . .

# Cloner les modules demandés et les ajouter au go.mod.
# Les replace directives utilisent ../../{module} ce qui correspond à /workspace/{module} ✓
RUN if [ -n "$MODULES" ]; then \
      for mod in $(echo "$MODULES" | tr ',' ' '); do \
        echo "→ Clonage du module $mod..." && \
        git clone "https://git.geronzi.fr/proxmoxPanel/$mod" "/workspace/$mod" && \
        printf "\nrequire git.geronzi.fr/proxmoxPanel/$mod v0.0.0\n" >> go.mod && \
        printf "\nreplace git.geronzi.fr/proxmoxPanel/$mod => ../../$mod\n" >> go.mod; \
      done; \
    fi

# Générer registered_modules.go avec les imports et appels RegisterModule corrects
RUN go run ./cmd/gen-modules

# Résoudre et télécharger toutes les dépendances (modules inclus)
RUN go mod tidy && 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

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

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

WORKDIR /app

COPY --from=builder /bin/proxmoxpanel /app/proxmoxpanel

RUN mkdir -p /app/data && chown -R pxp:pxp /app

USER pxp

EXPOSE 3001

ENV DATA_DIR=/app/data \
    LISTEN_ADDR=:3001 \
    APP_ENV=production

CMD ["/app/proxmoxpanel"]
