# Frontend build stage
FROM node:25-alpine AS frontend-build
WORKDIR /src/src/Web/ClientApp

COPY ["src/Web/ClientApp/package*.json", "./"]
RUN npm ci

COPY ["src/Web/ClientApp/", "./"]
RUN npm run build

# Backend build stage
FROM mcr.microsoft.com/dotnet/sdk:10.0.201 AS build
WORKDIR /src

# Copy solution and project files
COPY ["Fedlech.slnx", "."]
COPY ["Directory.Build.props", "."]
COPY ["Directory.Packages.props", "."]
COPY ["global.json", "."]

# Copy project files
COPY ["src/Domain/Domain.csproj", "src/Domain/"]
COPY ["src/Application/Application.csproj", "src/Application/"]
COPY ["src/Infrastructure/Infrastructure.csproj", "src/Infrastructure/"]
COPY ["src/Web/Web.csproj", "src/Web/"]

# Copy source code
COPY . .

# Copy built frontend into ASP.NET static files folder
COPY --from=frontend-build /src/src/Web/ClientApp/dist/ /src/src/Web/wwwroot/

# Restore and build
RUN dotnet restore "src/Web/Web.csproj"
RUN dotnet build "src/Web/Web.csproj" -c Release --no-restore /p:GenerateDocumentOnBuild=false

# Publish stage
FROM build AS publish
RUN dotnet publish "src/Web/Web.csproj" -c Release -o /app/publish /p:GenerateDocumentOnBuild=false

# Runtime stage
FROM mcr.microsoft.com/dotnet/aspnet:10.0
WORKDIR /app
COPY --from=publish /app/publish .
EXPOSE 8080
ENTRYPOINT ["dotnet", "Fedlech.Web.dll"]
