#!/usr/bin/env bash
# Safe server build for RMS 007 (Next.js + Prisma + MySQL).
# Does NOT use system Node — only the portable cache under this project (same pattern
# as office invoicing/scripts/build-provider.sh).
#
# From project root:
#   chmod +x scripts/build-rms.sh
#   ./scripts/build-rms.sh
#
# Optional env:
#   NODE_VERSION=20.19.3                      (default)
#   NODE_PORTABLE_CACHE=$PWD/.node-portable-cache
#   SKIP_PRISMA=1                             skip migrate + seed (build only)
#   SKIP_BUILD=1                              only install + prisma
#
# cPanel (Setup Node.js App):
#   Application root: /home/iseekhelpinterna/rms.iseekhelpinternational.com
#   Application URL: rms.iseekhelpinternational.com
#   Application startup file: server.js   ← project root server.js (not .next/…)
#   Node.js version: 20.x
#   Environment: DATABASE_URL, JWT_SECRET, OFFICE_API_BASE, RMS_LINK_TOKEN,
#                NODE_ENV=production (and GEMINI_API_KEY if needed).
#   cPanel rewrites .htaccess so traffic hits Node — without this you only see
#   an Apache directory listing ("Index of /").

set -euo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"

NODE_VERSION="${NODE_VERSION:-20.19.3}"
CACHE="${NODE_PORTABLE_CACHE:-$ROOT/.node-portable-cache}"
ARCHIVE_NAME="node-v${NODE_VERSION}-linux-x64"
TARBALL_URL="https://nodejs.org/dist/v${NODE_VERSION}/${ARCHIVE_NAME}.tar.xz"
NODE_DIR="${CACHE}/${ARCHIVE_NAME}"
NODE_BIN="${NODE_DIR}/bin/node"
NPM_BIN="${NODE_DIR}/bin/npm"
NPX_BIN="${NODE_DIR}/bin/npx"

if [[ ! -x "$NODE_BIN" ]]; then
  echo "[build-rms] Downloading Node ${NODE_VERSION} into ${CACHE}/ (one-time)..."
  mkdir -p "$CACHE"
  TMP="${CACHE}/.download-$$"
  mkdir -p "$TMP"
  curl -fsSL "$TARBALL_URL" -o "${TMP}/node.tar.xz"
  tar -xJf "${TMP}/node.tar.xz" -C "$CACHE"
  rm -rf "$TMP"
fi

if [[ ! -x "$NODE_BIN" ]] || [[ ! -x "$NPM_BIN" ]]; then
  echo "Failed: expected Node at $NODE_BIN"
  exit 1
fi

export PATH="${NODE_DIR}/bin:${PATH}"
export npm_config_cache="${NPM_LOCAL_CACHE:-$ROOT/.npm-portable-cache}"
mkdir -p "$npm_config_cache"

echo "[build-rms] node: $(command -v node) ($("$NODE_BIN" -v))"
echo "[build-rms] npm cache: $npm_config_cache"

echo "[build-rms] npm ci …"
"$NPM_BIN" ci --no-audit --no-fund

echo "[build-rms] prisma generate …"
"$NPX_BIN" prisma generate

if [[ "${SKIP_PRISMA:-}" != "1" ]]; then
  if [[ -d "$ROOT/prisma/migrations" ]] && [[ -n "$(find "$ROOT/prisma/migrations" -mindepth 1 -maxdepth 1 -print -quit 2>/dev/null)" ]]; then
    echo "[build-rms] prisma migrate deploy …"
    "$NPX_BIN" prisma migrate deploy
  else
    echo "[build-rms] prisma db push (no migrations folder yet) …"
    "$NPX_BIN" prisma db push
  fi
  echo "[build-rms] prisma db seed …"
  "$NPX_BIN" prisma db seed
fi

if [[ "${SKIP_BUILD:-}" != "1" ]]; then
  echo "[build-rms] npm run build …"
  "$NPM_BIN" run build
  echo "[build-rms] standalone: sync .next/static into standalone bundle …"
  STAND="$ROOT/.next/standalone"
  if [[ -d "$STAND" ]]; then
    mkdir -p "$STAND/.next/static"
    if [[ -d "$ROOT/.next/static" ]]; then
      rm -rf "$STAND/.next/static"/*
      cp -a "$ROOT/.next/static/." "$STAND/.next/static/"
    fi
    if [[ -d "$ROOT/public" ]]; then
      mkdir -p "$STAND/public"
      cp -a "$ROOT/public/." "$STAND/public/"
    fi
  fi
fi

echo "[build-rms] Done."
