# Build context: repo root (docker build -f infra/backend.Dockerfile .)
#
# Local test:  docker build -f infra/backend.Dockerfile -t nexuscrm-backend .
# AWS deploy:  docker build --platform linux/amd64 -f infra/backend.Dockerfile -t nexuscrm-backend .

ARG GO_IMAGE=golang:1.25-alpine
ARG TIDB_IMAGE=pingcap/tidb:v8.5.0
ARG RUNTIME_IMAGE=rockylinux:9

FROM ${GO_IMAGE} AS builder

ARG TARGETPLATFORM
ARG TARGETOS=linux
ARG TARGETARCH

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

WORKDIR /src

# Copy dependency files first for layer caching
COPY shared/go.mod shared/go.sum ./shared/
COPY backend/go.mod backend/go.sum ./backend/

WORKDIR /src/backend
RUN go mod download

# Copy source
WORKDIR /src
COPY shared/ ./shared/
COPY backend/ ./backend/

# Build static binaries for the target platform
WORKDIR /src/backend
RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -ldflags="-s -w" -o /nexuscrm-server ./cmd/server/
RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -ldflags="-s -w" -o /nexuscrm-setup ./cmd/setup/

# -----------------------------------------------------------
FROM ${TIDB_IMAGE} AS tidb

# -----------------------------------------------------------
FROM ${RUNTIME_IMAGE}

RUN dnf install -y \
      ca-certificates \
      tzdata \
      jq \
      mariadb \
      wget \
      shadow-utils \
    && dnf clean all \
    && groupadd --system app \
    && useradd --system --gid app app

COPY --from=builder /nexuscrm-server /usr/local/bin/nexuscrm-server
COPY --from=builder /nexuscrm-setup /usr/local/bin/nexuscrm-setup
COPY --from=tidb /tidb-server /usr/local/bin/tidb-server
COPY infra/entrypoint.sh /usr/local/bin/entrypoint.sh
COPY infra/stack-app-shell.json /stack-runtime/app-shell.json
COPY packs/ /packs/

RUN chmod +x /usr/local/bin/entrypoint.sh /usr/local/bin/tidb-server

EXPOSE 3001

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
