# Stage 1: Build Stockfish from source
FROM ubuntu:22.04 AS stockfish-builder

RUN apt-get update && apt-get install -y \
    build-essential \
    git \
    wget \
    curl \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /stockfish

RUN git clone --depth 1 --branch sf_18 https://github.com/official-stockfish/Stockfish.git .

WORKDIR /stockfish/src

# Download neural networks and build.
# Use x86-64-sse41-popcnt for broad AWS/Hetzner compatibility.
# Switch to x86-64-avx2 if your server CPU supports it (check: grep avx2 /proc/cpuinfo)
RUN make net && make -j$(nproc) build ARCH=x86-64-sse41-popcnt

# Stage 2: Build Go API
FROM golang:1.22-alpine AS go-builder

WORKDIR /app

COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o stockfish-api ./cmd/server

# Stage 3: Final minimal image
FROM ubuntu:22.04

RUN apt-get update && apt-get install -y \
    ca-certificates \
    curl \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY --from=stockfish-builder /stockfish/src/stockfish /usr/local/bin/stockfish
COPY --from=stockfish-builder /stockfish/src/*.nnue /app/

COPY --from=go-builder /app/stockfish-api /app/stockfish-api

RUN mkdir -p /app/portraits

ENV PORT=80
ENV STOCKFISH_PATH=/usr/local/bin/stockfish
ENV POOL_SIZE=12
ENV IDLE_TIMEOUT_SEC=300

EXPOSE 80

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

CMD ["/app/stockfish-api"]
