# ── Etapa 1: Descargar ONNX Runtime ───────────────────────────────────────────
FROM debian:bookworm-slim AS onnx-download

ARG ONNX_VERSION=1.22.0
RUN apt-get update && apt-get install -y --no-install-recommends wget ca-certificates \
    && rm -rf /var/lib/apt/lists/*
RUN wget -q https://github.com/microsoft/onnxruntime/releases/download/v${ONNX_VERSION}/onnxruntime-linux-x64-${ONNX_VERSION}.tgz \
    && tar -xzf onnxruntime-linux-x64-${ONNX_VERSION}.tgz \
    && mkdir -p /onnx/lib \
    && cp onnxruntime-linux-x64-${ONNX_VERSION}/lib/libonnxruntime.so* /onnx/lib/ \
    && rm -rf onnxruntime-linux-x64-${ONNX_VERSION}*

# ── Etapa 2: Build ─────────────────────────────────────────────────────────────
FROM golang:1.25-bookworm AS builder

RUN apt-get update && apt-get install -y --no-install-recommends \
    gcc g++ pkg-config \
    libtesseract-dev libleptonica-dev \
    tesseract-ocr tesseract-ocr-spa \
    && rm -rf /var/lib/apt/lists/*

COPY --from=onnx-download /onnx/lib/ /usr/local/lib/
RUN ldconfig

ENV CGO_ENABLED=1
ENV ONNXRUNTIME_SHARED_LIBRARY=/usr/local/lib/libonnxruntime.so
# Limitar paralelismo CGO para evitar OOM en Docker Desktop
ENV GOMAXPROCS=2

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

COPY . .

# -p 2 limita los paquetes compilados en paralelo (menor uso de RAM)
RUN go build -p 2 -o /out/api ./cmd/api

# ── Etapa 3: Runtime ───────────────────────────────────────────────────────────
FROM debian:bookworm-slim AS runtime

RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates curl \
    tesseract-ocr tesseract-ocr-spa \
    && rm -rf /var/lib/apt/lists/*

COPY --from=onnx-download /onnx/lib/ /usr/local/lib/
RUN ldconfig

ENV ONNXRUNTIME_SHARED_LIBRARY=/usr/local/lib/libonnxruntime.so

WORKDIR /app
COPY --from=builder /out/api  /app/api
COPY api/openapi.yaml         /app/openapi.yaml

ENV OPENAPI_PATH=/app/openapi.yaml
ENV MODEL_PATH=/app/models/model.onnx
ENV INFERENCE_CONFIG=/app/models/inference.json
ENV PORT=8080

EXPOSE 8080
CMD ["/app/api"]
