# ---- Build frontend ----
FROM node:22-slim AS web-build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .

# El login mágico y el "Ver como…" del panel viven detrás de la constante de build
# `DEMO` (`import.meta.env.DEV || import.meta.env.VITE_DEMO_UI === "1"`, ver
# src/pages/LoginPage.tsx, src/components/AppShell.tsx y src/components/DemoSwitcher.tsx).
# En un build de producción `DEV` es false, así que sin esta variable Vite elimina esas
# ramas por dead-code elimination: el despliegue quedaba con la landing prometiendo
# "no pide registro" y un /login sin ninguna cuenta de prueba que ofrecer.
#
# Este despliegue ES la demostración del producto, de ahí el default en 1. Cuando deje
# de serlo, basta pasar `--build-arg VITE_DEMO_UI=0` (o declararlo como build variable en
# Coolify) y las cuentas demo desaparecen del bundle sin tocar código.
ARG VITE_DEMO_UI=1
ENV VITE_DEMO_UI=$VITE_DEMO_UI

RUN npm run build

# ---- Runtime ----
FROM node:22-slim
WORKDIR /app
ENV NODE_ENV=production
ENV HOST=0.0.0.0
ENV PORT=3000

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

# Built frontend (vite outputs to dist/)
COPY --from=web-build /app/dist ./dist

# Server source (tsx runs TS directly in production)
COPY server ./server
COPY shared ./shared
COPY tsconfig.json ./

# Persistent SQLite data
RUN mkdir -p /app/data
VOLUME /app/data

EXPOSE 3000
CMD ["npx", "tsx", "server/index.ts"]
