# --- etap 1: build ---
FROM node:22-alpine AS build
WORKDIR /build

# najpierw manifesty, zeby warstwa z node_modules byla cache'owana
COPY package.json package-lock.json ./
RUN npm ci

COPY . .

# frontend odpytuje backend przez wzgledny /api, ktory nginx proxuje dalej
ARG VITE_API_URL=/api
ENV VITE_API_URL=$VITE_API_URL
RUN npm run build

# Pliki MediaPipe do rozmycia tla, kopiowane Z ZAINSTALOWANEGO PAKIETU.
#
# DLACZEGO NIE Z REPOZYTORIUM
# ---------------------------------------------------------------------------
# Zestaw WASM wazy kilkanascie MB i musi odpowiadac wersji
# `@mediapipe/tasks-vision` wciagnietej przez `@livekit/track-processors`.
# Wrzucony do repozytorium puchlby w historii na zawsze, a przy aktualizacji
# pakietu rozjezdzalby sie po cichu: rozmycie przestaje dzialac, a nic tego
# nie sygnalizuje. Kopiowanie przy budowaniu wiaze pliki z wersja pakietu.
#
# DLACZEGO NIE Z CDN
# ---------------------------------------------------------------------------
# Domyslnie biblioteka pobiera je z jsdelivr i storage.googleapis.com.
# Instancja w sieci zamknietej nie miałaby wtedy rozmycia wcale, a CSP
# musialoby dopuszczac dwa obce hosty. Serwowanie z wlasnej domeny miesci sie
# w istniejacym `connect-src 'self'`.
RUN mkdir -p /build/dist/mediapipe     && cp -r node_modules/@mediapipe/tasks-vision/wasm /build/dist/mediapipe/wasm

# --- etap 2: runtime ---
FROM nginx:1.27-alpine

COPY --from=build /build/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]
