# syntax=docker/dockerfile:1

FROM node:20-alpine AS web-builder
WORKDIR /src/Frontend

COPY Frontend/package.json Frontend/package-lock.json ./
RUN npm ci

COPY Frontend/ ./

ARG VITE_API_BASE=""
ARG VITE_KEYCLOAK_URL="https://auth.arrowstack.dev"
ARG VITE_KEYCLOAK_REALM="dev"
ARG VITE_KEYCLOAK_CLIENT_ID="learn-platform"
ENV VITE_API_BASE=${VITE_API_BASE} \
    VITE_KEYCLOAK_URL=${VITE_KEYCLOAK_URL} \
    VITE_KEYCLOAK_REALM=${VITE_KEYCLOAK_REALM} \
    VITE_KEYCLOAK_CLIENT_ID=${VITE_KEYCLOAK_CLIENT_ID}

RUN npm run build

FROM golang:1.22-alpine AS api-builder
WORKDIR /src/Backend

COPY Backend/go.mod Backend/go.sum ./
RUN go mod download

COPY Backend/ ./
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/learn-platform ./cmd/api

FROM alpine:3.20
RUN apk add --no-cache ca-certificates \
    && addgroup -S app \
    && adduser -S app -G app

WORKDIR /app
COPY --from=api-builder /out/learn-platform /app/learn-platform
COPY --from=web-builder /src/Frontend/dist /app/web

ENV PORT=8080 \
    WEB_DIR=/app/web \
    AUTH_DISABLED=false

USER app
EXPOSE 8080

HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=5 \
  CMD wget -q -O /dev/null http://127.0.0.1:8080/health || exit 1

ENTRYPOINT ["/app/learn-platform"]
