# Utiliza una imagen oficial de .NET 8 como base
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build-env
WORKDIR /src/dao/server

# Copia los archivos necesarios de la aplicación en el contenedor
COPY ServicesDAO /src/dao/ServicesDAO
COPY server/ /src/dao/server
COPY cloudservicesDAO.sln /src/dao
COPY cloudServiceDAO.proto /src/dao
COPY administrationservices.proto /src/dao
COPY EntityFrameworkDAOServices.proto /src/dao
COPY CloudServicesCrud.proto /src/dao

# Restauramos el proyecto para que se cumplan todos los requerimientos
RUN dotnet restore

# Construimos con la salida en el path indicado (-o)
RUN dotnet build server.csproj -c Release -o /app_dao/build

# Publicamos el proyecto en el path indicado (-o)
FROM build-env AS publish
RUN dotnet publish server.csproj -c Release -o /app_dao/publish/

# Crea la imagen final a partir de la base
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final
WORKDIR /app_dao

# GRPC HEALTH
# Descarga la herramienta grpc_health_probe
ADD https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/v0.4.43/grpc_health_probe-linux-amd64 /bin/grpc_health_probe
RUN chmod +x /bin/grpc_health_probe

# Copiamos de la imagen publish y el contenido del path de publish hacia /app_dao
COPY --from=publish /app_dao/publish/ .

# Exponemos el puerto necesario
EXPOSE 8440

# Se ejecuta la aplicación
ENTRYPOINT ["./server"]
