FROM node:22-alpine AS frontend-build
WORKDIR /build/frontend-astro

COPY frontend-astro/package*.json ./
RUN npm ci

COPY frontend-astro/ ./
RUN npm run build

FROM node:22-alpine AS runtime
WORKDIR /app

ENV NODE_ENV=production \
    HOST=0.0.0.0 \
    PORT=8787

COPY package*.json ./
RUN npm ci --omit=dev && npm cache clean --force

COPY src ./src
COPY sql ./sql
COPY scripts ./scripts
COPY frontend ./frontend
COPY --from=frontend-build /build/frontend-astro/dist ./public

RUN mkdir -p /app/uploads/images \
    && cp /app/frontend/annotation-overlay.js /app/public/annotation-overlay.js \
    && cp /app/frontend/*.html /app/public/

EXPOSE 8787

HEALTHCHECK --interval=10s --timeout=5s --start-period=20s --retries=6 \
  CMD node -e "fetch('http://127.0.0.1:8787/api/health/ready').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"

CMD ["npm", "start"]
