# Используем официальный образ OpenJDK 21 для сборки
FROM openjdk:21-jdk-slim as builder

# Устанавливаем рабочую директорию
WORKDIR /app

# Копируем файлы Maven
COPY mvnw .
COPY mvnw.cmd .
COPY .mvn .mvn
COPY pom.xml .

# Делаем mvnw исполняемым
RUN chmod +x ./mvnw

# Скачиваем зависимости (этот слой будет кешироваться если pom.xml не изменился)
RUN ./mvnw dependency:go-offline -B

# Копируем исходный код
COPY src src

# Собираем приложение
RUN ./mvnw clean package -DskipTests

# Создаем финальный образ
FROM openjdk:21-jre-slim

# Устанавливаем рабочую директорию
WORKDIR /app

# Создаем пользователя для безопасности
RUN groupadd -r appuser && useradd -r -g appuser appuser

# Копируем собранный JAR файл из builder образа
COPY --from=builder /app/target/*.jar app.jar

# Меняем владельца файла
RUN chown appuser:appuser app.jar

# Переключаемся на непривилегированного пользователя
USER appuser

# Открываем порт 80 (как указано в application.yml)
EXPOSE 80

# Устанавливаем переменные окружения для JVM
ENV JAVA_OPTS="-Xmx512m -Xms256m"

# Команда запуска приложения
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
