# ==============================================================================
# Stage 1: Build frontend
#

FROM node:22 AS frontend

WORKDIR /app

# Install dependencies
COPY frontend/package.json frontend/package-lock.json /app/
RUN npm install --include=dev

# Copy entire application code
COPY frontend frontend

# End result will be in: /app/frontend/dist
RUN cd frontend; npm run build

# ==============================================================================
# Stage 2: Build Backend
#

# Build the application from source
FROM golang:1.24 AS backend

WORKDIR /app

COPY backend/go.mod backend/go.sum /app/
RUN go mod download

COPY backend backend
COPY --from=frontend /app/frontend/dist /app/backend/frontend

RUN cd backend; CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /backend

# ==============================================================================
# Stage 3: Final image
#

# Deploy the application binary into a lean image
FROM gcr.io/distroless/base-debian12

COPY --from=backend /backend /backend

USER nonroot:nonroot

ENTRYPOINT ["/backend"]
