# Stage 1: Build
FROM maven:3.9-eclipse-temurin-21 AS builder
WORKDIR /build

# Copy the parent pom and all module poms first for better layer caching
COPY backend/pom.xml ./pom.xml
COPY backend/projectmanagement-client/pom.xml projectmanagement-client/
COPY backend/projectmanagement-server/pom.xml projectmanagement-server/


RUN mvn dependency:go-offline -B

# Copy the entire backend source code
COPY backend/ .

# 4. Build the application
RUN mvn -pl projectmanagement-server -am clean package \
    -DskipTests -Dmaven.javadoc.skip=true


# =======================
# Runtime Image
# =======================
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app

# Create user and group
RUN addgroup -S spring && adduser -S spring -G spring

# Copy the built JAR from builder stage
COPY --from=builder /build/projectmanagement-server/target/*.jar app.jar

# Create directories and set permissions
RUN mkdir -p /app/logs /app/bpmn && \
    chown -R spring:spring /app/logs /app

# Copy BPMN files
# NOTE: This expects a 'bpmn' folder in your project root
COPY --chown=spring:spring bpmn/ /app/bpmn/


USER spring
EXPOSE 8071

# Environment setup
ENV IKON_ACCESSMANAGEMENT_INIT_FILE=/app/bpmn/project.json
ENV IKON_PROCESSENGINE_BPMN_PATH=/app/bpmn
ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0"

# Run the application
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
