# Multi-stage Docker build for EonaCat.Sync

# Build stage
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build

WORKDIR /src

# Copy project files
COPY ["EonaCat.Sync/EonaCat.Sync.csproj", "EonaCat.Sync/"]

# Restore packages
RUN dotnet restore "EonaCat.Sync/EonaCat.Sync.csproj"

# Copy source code
COPY . .

# Build application
RUN dotnet build "EonaCat.Sync/EonaCat.Sync.csproj" -c Release -o /app/build

# Publish stage
FROM build AS publish
RUN dotnet publish "EonaCat.Sync/EonaCat.Sync.csproj" -c Release -o /app/publish

# Runtime stage
FROM mcr.microsoft.com/dotnet/runtime:6.0

WORKDIR /app

# Install additional tools if needed
RUN apt-get update && \
	apt-get install -y --no-install-recommends \
	curl \
	&& rm -rf /var/lib/apt/lists/*

# Copy published application
COPY --from=publish /app/publish .

# Create non-root user for security
RUN useradd -m -u 1000 syncuser && \
	chown -R syncuser:syncuser /app

USER syncuser

# Environment variables
ENV DOTNET_URLS=http://+:80 \
	ASPNETCORE_ENVIRONMENT=Production \
	SYNC_DATA_PATH=/data/sync \
	SYNC_BACKUP_PATH=/data/backups \
	SYNC_LOG_PATH=/data/logs

# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
	CMD curl -f http://localhost:80/health || exit 1

# Expose ports
EXPOSE 80

# Entry point
ENTRYPOINT ["dotnet", "EonaCat.Sync.dll"]
