# syntax=docker/dockerfile:1

# ─── Stage 1: Build Go binaries ───────────────────────────────────────────────
FROM golang:1.26.2-alpine AS builder

ARG TARGETOS
ARG TARGETARCH

RUN apk --no-cache add ca-certificates git build-base

WORKDIR /app

COPY go.mod go.sum ./
RUN --mount=type=cache,target=/go/pkg/mod \
    go mod download

COPY . .

ARG SERVICE=tenant-api
RUN --mount=type=cache,target=/go/pkg/mod \
    --mount=type=cache,target=/root/.cache/go-build \
    CGO_ENABLED=1 GOOS="${TARGETOS:-$(go env GOOS)}" GOARCH="${TARGETARCH:-$(go env GOARCH)}" \
    go build -trimpath -ldflags="-s -w" \
    -o /bin/service ./cmd/${SERVICE}

RUN --mount=type=cache,target=/go/pkg/mod \
    --mount=type=cache,target=/root/.cache/go-build \
    CGO_ENABLED=0 GOOS="${TARGETOS:-$(go env GOOS)}" GOARCH="${TARGETARCH:-$(go env GOARCH)}" \
    go build -trimpath -ldflags="-s -w" \
    -o /bin/browser-fetch ./cmd/browser-fetch

RUN --mount=type=cache,target=/go/pkg/mod \
    --mount=type=cache,target=/root/.cache/go-build \
    CGO_ENABLED=1 GOOS="${TARGETOS:-$(go env GOOS)}" GOARCH="${TARGETARCH:-$(go env GOARCH)}" \
    go build -trimpath -ldflags="-s -w" \
    -o /bin/seed-platform-templates ./cmd/seed-platform-templates

# ─── Stage 2: Migration image (bundles SQL files + migrate binary) ─────────────
FROM migrate/migrate:v4.19.1 AS migrate-tool

FROM alpine:3.19 AS migrate
RUN apk --no-cache add ca-certificates
COPY --from=migrate-tool /usr/local/bin/migrate /usr/local/bin/migrate
COPY --from=builder /bin/seed-platform-templates /usr/local/bin/seed-platform-templates
COPY migrations/ /migrations/
COPY migrations_monitoring/ /migrations_monitoring/
COPY migrations_ops/ /migrations_ops/
COPY configs/ /app/configs/
ENTRYPOINT ["/usr/local/bin/migrate"]

# ─── Stage 3: Runtime image ────────────────────────────────────────────────────
FROM alpine:3.19 AS runtime
RUN apk --no-cache add ca-certificates tzdata

WORKDIR /app

COPY --from=builder /bin/service /app/service
COPY configs/ /app/configs/

EXPOSE 8080 8081
ENTRYPOINT ["/app/service"]

# ─── Stage 4: Browser fetch runtime (bundles Lightpanda) ──────────────────────
FROM lightpanda/browser:nightly AS browser-fetch

WORKDIR /app

COPY --from=builder /bin/browser-fetch /app/service

EXPOSE 8082
ENTRYPOINT ["/app/service"]
