# syntax=docker/dockerfile:1.7

ARG DOTNET_VERSION=10.0

##
## Runtime-Basis
##
# MesoAibe.Service ist ein reiner Hintergrunddienst (Generic Host, kein Kestrel/ASP.NET Core) —
# das schlankere runtime-Image genuegt, anders als bei MesoArchivWeb/MesoWorkerService.
FROM mcr.microsoft.com/dotnet/runtime:${DOTNET_VERSION} AS base
LABEL org.opencontainers.image.description="MESO AIBE Service"
WORKDIR /app

# MESOYEAR-Berechnung und Logzeitstempel haengen an der Systemzeitzone.
RUN apt-get update && apt-get install -y --no-install-recommends tzdata \
    && ln -fs /usr/share/zoneinfo/Europe/Berlin /etc/localtime \
    && dpkg-reconfigure -f noninteractive tzdata \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

ENV TZ=Europe/Berlin \
    DOTNET_RUNNING_IN_CONTAINER=true

##
## Build & Publish
##
FROM mcr.microsoft.com/dotnet/sdk:${DOTNET_VERSION} AS publish
WORKDIR /src

COPY nuget.config.template ./nuget.config

# Nur die csproj-Dateien zuerst kopieren: der Restore-Layer bricht damit ausschliesslich bei
# Paketaenderungen, nicht bei jeder Quellcodeaenderung.
COPY MesoAibe.Core/MesoAibe.Core.csproj       MesoAibe.Core/
COPY MesoAibe.Ingest/MesoAibe.Ingest.csproj   MesoAibe.Ingest/
COPY MesoAibe.Service/MesoAibe.Service.csproj MesoAibe.Service/

# GITHUBUSERNAME/-PASSWORD (privater NuGet-Feed, MesoXPO.Business-DevEx26.1) und
# DevExpress_License ausschliesslich als BuildKit-Secrets — nie als --build-arg, sonst
# landen sie in der Image-/Cache-Historie.
RUN --mount=type=cache,target=/root/.nuget/packages \
    --mount=type=secret,id=GITHUBUSERNAME \
    --mount=type=secret,id=GITHUBPASSWORD \
    --mount=type=secret,id=DevExpress_License \
    bash -lc '\
      export GITHUBUSERNAME="$(cat /run/secrets/GITHUBUSERNAME)"; \
      export GITHUBPASSWORD="$(cat /run/secrets/GITHUBPASSWORD)"; \
      export DevExpress_License="$(cat /run/secrets/DevExpress_License)"; \
      dotnet restore MesoAibe.Service/MesoAibe.Service.csproj --nologo'

COPY MesoAibe.Core/    MesoAibe.Core/
COPY MesoAibe.Ingest/  MesoAibe.Ingest/
COPY MesoAibe.Service/ MesoAibe.Service/

WORKDIR /src/MesoAibe.Service
RUN --mount=type=cache,target=/root/.nuget/packages \
    --mount=type=secret,id=DevExpress_License \
    bash -lc '\
      export DevExpress_License="$(cat /run/secrets/DevExpress_License)"; \
      dotnet publish MesoAibe.Service.csproj -c Release -o /app/publish --no-restore --nologo'

##
## Final
##
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

# Nicht-root wie in MesoArchivWeb/MesoWorkerService: das Dienstkonto braucht nur Schreibrechte
# auf /app (Log-, Berichts- und Import-XML-Ordner sind hier standardmaessig relativ).
RUN mkdir -p /app/logs && chown -R app:app /app
USER app

ENTRYPOINT ["dotnet", "MesoAibe.Service.dll"]
