#!/usr/bin/env bash
set -Eeuo pipefail
ROOT="$(pwd)"
NODE_BIN="${NODE_BIN:-/opt/cpanel/ea-nodejs22/bin/node}"
NPM_BIN="${NPM_BIN:-/opt/cpanel/ea-nodejs22/bin/npm}"
UPDATE_ZIP="${1:-}"
[[ -n "$UPDATE_ZIP" && -f "$UPDATE_ZIP" ]] || { echo "Usage: bash update.sh /path/to/update-payload.zip"; exit 1; }
[[ -f "$ROOT/.env" ]] || { echo "This folder does not look like an installed LifeBook application (.env missing)."; exit 1; }
STAMP="$(date '+%Y%m%d-%H%M%S')"
BACKUP="$ROOT/lifebook-backups/update-$STAMP"
mkdir -p "$BACKUP"
for name in app components lib public scripts sql app.js package.json package-lock.json next.config.mjs jsconfig.json VERSION.txt; do
  [[ -e "$ROOT/$name" ]] && cp -a "$ROOT/$name" "$BACKUP/"
done
TMP="$(mktemp -d "$ROOT/.ys-update.XXXXXX")"
unzip -q "$UPDATE_ZIP" -d "$TMP"
SRC="$TMP/payload"; [[ -d "$SRC" ]] || SRC="$TMP"
for name in app components lib public scripts sql app.js package.json next.config.mjs jsconfig.json VERSION.txt; do
  [[ -e "$SRC/$name" ]] || continue
  rm -rf "$ROOT/$name"; cp -a "$SRC/$name" "$ROOT/$name"
done
rm -rf "$TMP"
cd "$ROOT"
if [[ -f package-lock.json ]]; then "$NPM_BIN" ci --no-audit --no-fund; else "$NPM_BIN" install --no-audit --no-fund; fi
"$NPM_BIN" run build
"$NODE_BIN" scripts/migrate.mjs
mkdir -p tmp && touch tmp/restart.txt
echo "Update complete. Backup: $BACKUP"
