# Use an official Node runtime as a parent image
FROM node:16

# Set the working directory in the container
WORKDIR /usr/src/app

# Copy package.json and package-lock.json (or yarn.lock) into the container
COPY package*.json ./

# Install dependencies
RUN npm install
# Bundle app source inside Docker image
COPY . .

# Set production environment variables for build
ENV NODE_ENV=production
ENV PUBLIC_URL=/
ENV GENERATE_SOURCEMAP=false

# Build args for Keycloak config (baked at build time)
ARG REACT_APP_KEYCLOAK_URL=https://auth.uvdl.ornl.gov
ARG REACT_APP_KEYCLOAK_REALM=leaf
ARG REACT_APP_KEYCLOAK_CLIENT_ID=leaf-ui
ARG REACT_APP_BACKEND_URL=https://leaf.ornl.gov
ARG REACT_APP_WS_URL=wss://leaf.ornl.gov/ws
ARG REACT_APP_GRAFANA_URL=https://leaf.ornl.gov/grafana
ENV REACT_APP_KEYCLOAK_URL=$REACT_APP_KEYCLOAK_URL
ENV REACT_APP_KEYCLOAK_REALM=$REACT_APP_KEYCLOAK_REALM
ENV REACT_APP_KEYCLOAK_CLIENT_ID=$REACT_APP_KEYCLOAK_CLIENT_ID
ENV REACT_APP_BACKEND_URL=$REACT_APP_BACKEND_URL
ENV REACT_APP_WS_URL=$REACT_APP_WS_URL
ENV REACT_APP_GRAFANA_URL=$REACT_APP_GRAFANA_URL

# Build the app for production
RUN npm run build

# Install serve to run the application
RUN npm install -g serve

# Command to run the app with serve.json configuration
CMD ["serve", "-s", "build", "-l", "3000"]

# Expose port 3000 to the outside once the container is running
EXPOSE 3000