FROM node:22.14.0-alpine AS web-build

WORKDIR /build/web
COPY web/package.json web/package-lock.json ./
RUN npm ci
COPY web/ ./
RUN npm run build -- --mode production

FROM hseeberger/scala-sbt:17.0.2_1.6.2_2.13.8 AS scala-build

WORKDIR /build
COPY build.sbt ./
COPY project/ ./project/
COPY src/ ./src/
RUN sbt clean assembly

FROM amazoncorretto:17-alpine

RUN addgroup -S weather && adduser -S -G weather weather
WORKDIR /app
RUN mkdir -p /app/data/tmp /app/data/grids /app/web/dist && chown -R weather:weather /app

COPY --from=scala-build --chown=weather:weather /build/target/scala-2.13/app.jar /app/app.jar
COPY --from=web-build --chown=weather:weather /build/web/dist/ /app/web/dist/

USER weather
EXPOSE 8080

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

CMD ["java", "-Xms128m", "-Xmx512m", "-XX:+UseG1GC", "-jar", "/app/app.jar"]
