# Yieldly on Fly.io — one process:
#   /health  /privacy  /support  /snaptrade/*  /market/*  → Hono API
#   everything else                                       → Expo web demo (static)
#
# Native iOS/Android binaries are NOT deployed here.

# ---------- Expo web export ----------
FROM node:22-bookworm-slim AS web
WORKDIR /src
ENV CI=1
ENV EXPO_NO_TELEMETRY=1
ENV EXPO_NO_DOTENV=1
ENV NODE_OPTIONS=--max-old-space-size=2048

COPY package.json package-lock.json ./
RUN npm ci

COPY app.json tsconfig.json babel.config.js ./
COPY app ./app
COPY assets ./assets
COPY components ./components
COPY domain ./domain
COPY features ./features
COPY hooks ./hooks
COPY services ./services
COPY store ./store
COPY theme ./theme

# "same" → the baked web client calls this Fly app's origin (no localhost).
ARG EXPO_PUBLIC_API_BASE_URL=same
ARG EXPO_PUBLIC_SNAPTRADE_CLIENT_ID=
ENV EXPO_PUBLIC_API_BASE_URL=$EXPO_PUBLIC_API_BASE_URL
ENV EXPO_PUBLIC_SNAPTRADE_CLIENT_ID=$EXPO_PUBLIC_SNAPTRADE_CLIENT_ID

RUN npx expo export --platform web

# ---------- API + static host ----------
FROM node:22-bookworm-slim AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV PORT=8080
ENV WEB_ROOT=/app/public

COPY server/package.json server/package-lock.json ./
RUN npm ci --omit=dev

COPY server/src ./src
COPY server/tsconfig.json ./
COPY yieldly-mobile.zip ./yieldly-mobile.zip
COPY --from=web /src/dist ./public

EXPOSE 8080
CMD ["npm", "start"]
