# --- Stage 1: Build & Dependencies ---
FROM maven:3.9-eclipse-temurin-21-alpine AS build
WORKDIR /app

# 1. Copiamos los archivos de configuración (Estructura de poms)
COPY pom.xml .
COPY application/pom.xml ./application/
COPY bootstrap/pom.xml ./bootstrap/
COPY domain/pom.xml ./domain/
COPY infrastructure/pom.xml ./infrastructure/

# 2. Descargamos dependencias (Cacheamos esta capa)
# Usamos install de los poms para que los módulos se reconozcan entre sí
RUN mvn dependency:go-offline -B

# 3. Copiamos el código fuente y compilamos
COPY application/src ./application/src
COPY bootstrap/src ./bootstrap/src
COPY domain/src ./domain/src
COPY infrastructure/src ./infrastructure/src

RUN mvn clean package -DskipTests -B

# --- Stage 2: Run (Imagen final ligera) ---
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app

# Seguridad: Usuario no-root
RUN addgroup -S app && adduser -S app -G app
USER app:app

# Copiamos solo el JAR final (ajustado a tu módulo bootstrap)
COPY --from=build /app/bootstrap/target/bootstrap-*.jar app.jar

# Configuración de Memoria y Rendimiento para Microservicios
# -XX:+UseSerialGC: Menos consumo de RAM para apps < 1GB
# -XX:TieredStopAtLevel=1: Arranque más rápido y menos uso de RAM del compilador JIT
# -XX:MaxRAMPercentage: Se ajusta dinámicamente al límite de Docker
ENV JAVA_OPTS="-XX:+UseContainerSupport \
               -XX:MaxRAMPercentage=75.0 \
               -XX:+UseSerialGC \
               -XX:TieredStopAtLevel=1 \
               -Xms128m"

EXPOSE 80

ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]