FROM node:22.19-alpine AS frontend-builder

WORKDIR /app
RUN corepack enable

COPY frontend/package.json frontend/pnpm-lock.yaml frontend/pnpm-workspace.yaml ./frontend/
RUN cd frontend && pnpm install --frozen-lockfile

COPY frontend ./frontend
COPY shared ./shared

ARG VITE_AUTH0_DOMAIN
ARG VITE_AUTH0_CLIENT_ID
ARG VITE_AUTH0_CONNECTION=google-oauth2
ARG VITE_INVESTIBOOK_URL=https://investibook.tidbcloud.com
ARG VITE_SLOW_LOG_EXPLORER_BASE_URL=/slow-log-explorer-app

ENV VITE_AUTH0_DOMAIN=${VITE_AUTH0_DOMAIN} \
    VITE_AUTH0_CLIENT_ID=${VITE_AUTH0_CLIENT_ID} \
    VITE_AUTH0_CONNECTION=${VITE_AUTH0_CONNECTION} \
    VITE_INVESTIBOOK_URL=${VITE_INVESTIBOOK_URL} \
    VITE_SLOW_LOG_EXPLORER_BASE_URL=${VITE_SLOW_LOG_EXPLORER_BASE_URL}

RUN cd frontend && pnpm build

FROM python:3.12-alpine AS runtime

ARG VCS_REF=unknown
LABEL org.opencontainers.image.title="SQL Catalog" \
      org.opencontainers.image.revision=${VCS_REF}

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    SQL_CATALOG_HOST=0.0.0.0 \
    SQL_CATALOG_PORT=8765 \
    SQL_CATALOG_ALLOW_HISTORICAL_REPLAY=false

WORKDIR /app

RUN apk add --no-cache ca-certificates \
    && addgroup -g 10001 -S sqlcatalog \
    && adduser -u 10001 -S -D -H -G sqlcatalog sqlcatalog

COPY backend/requirements.txt ./backend/requirements.txt
RUN pip install --no-cache-dir -r backend/requirements.txt

COPY backend ./backend
COPY shared ./shared
COPY --from=frontend-builder /app/frontend/dist ./frontend/dist

USER 10001:10001
EXPOSE 8765

HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
  CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8765/api/v1/healthz/live', timeout=3)" || exit 1

CMD ["python", "-m", "backend.sql_catalog.server"]
