# ---- build stage ----
FROM golang:1.25-alpine AS builder

WORKDIR /app

# Cache module downloads separately from source changes
COPY go.mod go.sum ./
RUN go mod download

COPY . .

# Build-time version metadata (same convention as deploy/prod/Dockerfile.slim).
ARG VERSION_TAG=dev
ARG VERSION_COMMIT=none
ARG VERSION_DATE=unknown
ARG VERSION_DIRTY=false

RUN LDFLAGS="\
      -X go-blockchain/node/version.Tag=${VERSION_TAG} \
      -X go-blockchain/node/version.Commit=${VERSION_COMMIT} \
      -X go-blockchain/node/version.Date=${VERSION_DATE} \
      -X go-blockchain/node/version.Dirty=${VERSION_DIRTY}" && \
    CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="$LDFLAGS" -o /bin/node   ./cmd/node   && \
    CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="$LDFLAGS" -o /bin/client ./cmd/client && \
    CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="$LDFLAGS" -o /bin/wallet ./cmd/wallet && \
    CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="$LDFLAGS" -o /bin/peerid ./cmd/peerid

# ---- runtime stage ----
FROM alpine:3.19

RUN apk add --no-cache ca-certificates tzdata netcat-openbsd

COPY --from=builder /bin/node   /usr/local/bin/node
COPY --from=builder /bin/client /usr/local/bin/client
COPY --from=builder /bin/wallet /usr/local/bin/wallet
COPY --from=builder /bin/peerid /usr/local/bin/peerid

# Bake testnet keys into image so nodes always load consistent identities
# (avoids Windows volume-mount failures with ./testdata:/keys:ro)
COPY --from=builder /app/testdata/ /keys/

# Bake username_registry contract (messenger username with pricing)
COPY --from=builder /app/contracts/username_registry/username_registry.wasm /keys/username_registry.wasm
COPY --from=builder /app/contracts/username_registry/username_registry_abi.json /keys/username_registry_abi.json

# Bake governance contract (on-chain parameter governance)
COPY --from=builder /app/contracts/governance/governance.wasm /keys/governance.wasm
COPY --from=builder /app/contracts/governance/governance_abi.json /keys/governance_abi.json

# Bake auction contract (English auction with token escrow)
COPY --from=builder /app/contracts/auction/auction.wasm /keys/auction.wasm
COPY --from=builder /app/contracts/auction/auction_abi.json /keys/auction_abi.json

# Bake escrow contract (two-party trustless escrow)
COPY --from=builder /app/contracts/escrow/escrow.wasm /keys/escrow.wasm
COPY --from=builder /app/contracts/escrow/escrow_abi.json /keys/escrow_abi.json

# libp2p P2P port
EXPOSE 4001/tcp
# HTTP stats + explorer + relay API
EXPOSE 8080/tcp

ENTRYPOINT ["/usr/local/bin/node"]
