# syntax=docker/dockerfile:1

FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src

COPY TuneRipper.Shared/TuneRipper.Shared.csproj TuneRipper.Shared/
COPY TuneRipper/TuneRipper.csproj TuneRipper/
COPY TuneRipper.Api/TuneRipper.Api.csproj TuneRipper.Api/
RUN dotnet restore TuneRipper.Api/TuneRipper.Api.csproj \
    && dotnet restore TuneRipper/TuneRipper.csproj

COPY . .
RUN dotnet publish TuneRipper/TuneRipper.csproj -c Release -o /out/client --no-restore \
    && dotnet publish TuneRipper.Api/TuneRipper.Api.csproj -c Release -o /out/api --no-restore

FROM mcr.microsoft.com/dotnet/aspnet:10.0-noble AS runtime
ARG TARGETARCH
ARG YT_DLP_VERSION=2026.08.19

RUN apt-get update \
    && apt-get install -y --no-install-recommends ca-certificates curl ffmpeg \
    && case "$TARGETARCH" in \
         amd64) asset="yt-dlp_linux" ;; \
         arm64) asset="yt-dlp_linux_aarch64" ;; \
         *) echo "Unsupported architecture: $TARGETARCH" >&2; exit 1 ;; \
       esac \
    && cd /tmp \
    && curl -fsSLO "https://github.com/yt-dlp/yt-dlp/releases/download/${YT_DLP_VERSION}/${asset}" \
    && curl -fsSLO "https://github.com/yt-dlp/yt-dlp/releases/download/${YT_DLP_VERSION}/SHA2-256SUMS" \
    && grep " ${asset}$" SHA2-256SUMS | sha256sum -c - \
    && install -m 0755 "$asset" /usr/local/bin/yt-dlp \
    && rm -f "$asset" SHA2-256SUMS \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY --from=build /out/api/ ./
COPY --from=build /out/client/wwwroot/ ./wwwroot/

RUN mkdir -p /data/downloads \
    && chown -R app:app /app /data/downloads

USER app
ENV ASPNETCORE_URLS=http://+:8080 \
    ASPNETCORE_ENVIRONMENT=Production \
    YtDlp__ExecutablePath=/usr/local/bin/yt-dlp \
    YtDlp__FfmpegExecutablePath=/usr/bin/ffmpeg \
    Storage__DownloadsPath=/data/downloads

EXPOSE 8080
ENTRYPOINT ["dotnet", "TuneRipper.Api.dll"]
