# ===== Stage 1: Build =====
FROM docker.m.daocloud.io/library/maven:3.9.9-eclipse-temurin-17 AS builder

WORKDIR /workspace

ARG MAVEN_MIRROR=https://maven.aliyun.com/repository/public

RUN mkdir -p /root/.m2 \
    && printf '%s\n' \
    '<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"' \
    '          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' \
    '          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">' \
    '  <mirrors>' \
    '    <mirror>' \
    '      <id>public-mirror</id>' \
    '      <name>Public Maven Mirror</name>' \
    '      <url>'"${MAVEN_MIRROR}"'</url>' \
    '      <mirrorOf>*</mirrorOf>' \
    '    </mirror>' \
    '  </mirrors>' \
    '</settings>' \
    > /root/.m2/settings.xml

# Cache Maven dependencies
COPY pom.xml ./
COPY yaoai-common/pom.xml yaoai-common/
COPY yaoai-domain/pom.xml yaoai-domain/
COPY yaoai-security/pom.xml yaoai-security/
COPY yaoai-billing/pom.xml yaoai-billing/
COPY yaoai-storage/pom.xml yaoai-storage/
COPY yaoai-ai-core/pom.xml yaoai-ai-core/
COPY yaoai-ai-providers/pom.xml yaoai-ai-providers/
COPY yaoai-agent/pom.xml yaoai-agent/
COPY yaoai-pipeline/pom.xml yaoai-pipeline/
COPY yaoai-task/pom.xml yaoai-task/
COPY yaoai-media/pom.xml yaoai-media/
COPY yaoai-api/pom.xml yaoai-api/
COPY yaoai-admin/pom.xml yaoai-admin/
COPY yaoai-worker/pom.xml yaoai-worker/
COPY yaoai-bootstrap/pom.xml yaoai-bootstrap/
COPY yaoai-test/pom.xml yaoai-test/

RUN mvn -s /root/.m2/settings.xml dependency:go-offline -B -ntp

# Build
COPY . .
RUN mvn -s /root/.m2/settings.xml package -pl yaoai-bootstrap -am -DskipTests -B -ntp

# ===== Stage 2: Runtime =====
FROM docker.m.daocloud.io/library/eclipse-temurin:17-jre-jammy

LABEL maintainer="YaoAI Team <yaoke251@gmail.com>"
LABEL org.opencontainers.image.title="YaoAI Comic Studio"
LABEL org.opencontainers.image.version="0.1.0"

ENV LANG=C.UTF-8 \
    LANGUAGE=C.UTF-8 \
    LC_ALL=C.UTF-8

ARG APT_MIRROR=https://mirrors.tuna.tsinghua.edu.cn/ubuntu

RUN set -eux; \
    if [ -f /etc/apt/sources.list ]; then \
        sed -i "s|http://archive.ubuntu.com/ubuntu|${APT_MIRROR}|g; s|http://security.ubuntu.com/ubuntu|${APT_MIRROR}|g" /etc/apt/sources.list; \
    fi; \
    if [ -f /etc/apt/sources.list.d/ubuntu.sources ]; then \
        sed -i "s|http://archive.ubuntu.com/ubuntu|${APT_MIRROR}|g; s|http://security.ubuntu.com/ubuntu|${APT_MIRROR}|g" /etc/apt/sources.list.d/ubuntu.sources; \
    fi; \
    apt-get -o Acquire::Retries=5 update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ffmpeg \
    && rm -rf /var/lib/apt/lists/*

# Non-root user
RUN groupadd -r yaoai && useradd -r -g yaoai yaoai

WORKDIR /app

COPY --from=builder /workspace/yaoai-bootstrap/target/*.jar app.jar

RUN mkdir -p logs && chown -R yaoai:yaoai /app

USER yaoai

EXPOSE 8080

ENV JAVA_OPTS="-Xms256m -Xmx512m -XX:+UseG1GC -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8"

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