FROM --platform=$BUILDPLATFORM golang:1.24.0-alpine AS builder

WORKDIR /app

# Download dependencies and install required tools
COPY go.mod go.sum ./
RUN go mod download && \
    go install github.com/swaggo/swag/cmd/swag@latest

# Copy source code and Makefile
COPY . .

# Install required tools and make scripts executable
RUN apk add --no-cache upx make bash && \
    chmod +x /app/lib/stylegen/gen.sh

# Create necessary directories
RUN mkdir -p /app/public/css

# Generate assets and build with optimizations
SHELL ["/bin/bash", "-c"]

# Platform-specific builds
ARG TARGETPLATFORM
RUN cd /app && make generate && \
    case "${TARGETPLATFORM}" in \
    "linux/amd64") GOARCH=amd64 ;; \
    "linux/arm64") GOARCH=arm64 ;; \
    *) GOARCH=amd64 ;; \
    esac && \
    CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} go build \
    -ldflags='-s -w -extldflags "-static"' \
    -tags netgo,osusergo \
    -o /go/bin/app

# Final stage
FROM --platform=$TARGETPLATFORM scratch

# Copy static files and assets
COPY --from=builder /app/public/css/styles.css /public/css/styles.css
COPY --from=builder /app/docs /docs
COPY --from=builder /go/bin/app /app

ENTRYPOINT ["/app"]
