# --------------------------------------------------------------------------------------
# 1. ETAPA DE CONSTRUCCIÓN (BUILD STAGE)
# Utiliza la imagen SDK para compilar la aplicación.
# --------------------------------------------------------------------------------------
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src

COPY NuGet.Config .
# Copia los archivos de proyecto (.csproj) de cada subdirectorio y restáuralos.
# Esto aprovecha el caché de Docker si solo cambian los paquetes, no el código.
COPY ["adas-core/adas-core.csproj", "adas-core/"]
COPY ["adas-core.Application/adas-core.Application.csproj", "adas-core.Application/"]
COPY ["adas-core.Authentication/adas-core.Authentication.csproj", "adas-core.Authentication/"]
COPY ["adas-core.Domain/adas-core.Domain.csproj", "adas-core.Domain/"]
COPY ["adas-core.Infrastructure/adas-core.Infrastructure.csproj", "adas-core.Infrastructure/"]
COPY ["adas-core.LdapLogin/adas-core.LdapLogin.csproj", "adas-core.LdapLogin/"]
COPY ["adas-core.LocalLogin/adas-core.LocalLogin.csproj", "adas-core.LocalLogin/"]
COPY ["adas-core.module.LightBeacons/adas-core.module.LightBeacons.csproj", "adas-core.module.LightBeacons/"]
COPY ["adas-core.module.ProxyDevices/adas-core.module.ProxyDevices.csproj", "adas-core.module.ProxyDevices/"]
COPY ["adas-core.module.Relays/adas-core.module.Relays.csproj", "adas-core.module.Relays/"]
COPY ["adas-core.Test/adas-core.Test.csproj", "adas-core.Test/"]
# ... (Añade COPY para el resto de proyectos .csproj: LdapLogin, LocalLogin, modules, Test si son dependencias)

# Copia el archivo de solución (.sln) si existe, si no, usa el siguiente comando con los .csproj
# En este caso, asumiremos que se restaura y compila por proyecto principal.
# Si tienes un archivo de solución, es mejor copiarlo aquí.

# Restaura las dependencias (NuGet)
RUN dotnet restore "adas-core/adas-core.csproj"

# Copia el resto de los archivos fuente (todo el código)
COPY . .

# Cambia al directorio del proyecto principal
WORKDIR /src/adas-core

# Publica la aplicación final en modo Release
# El argumento -o /app/publish indica dónde se guardará el resultado de la publicación.
RUN dotnet publish "adas-core.csproj" -c Release -o /app/publish /p:UseAppHost=false


# --------------------------------------------------------------------------------------
# 2. ETAPA FINAL (RUNTIME STAGE)
# Utiliza la imagen de ejecución, que es más pequeña y no contiene herramientas de compilación.
# --------------------------------------------------------------------------------------
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
WORKDIR /app

# Copia los archivos publicados desde la etapa 'build'
COPY --from=build /app/publish .

# Define el punto de entrada de la aplicación
# Este es el nombre del ensamblado DLL principal
ENTRYPOINT ["dotnet", "adas-core.dll"]
# El puerto de escucha por defecto de ASP.NET Core en Docker es el 8080 (o 80 en versiones anteriores)
ENV ASPNETCORE_URLS=http://+:80
EXPOSE 80