#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
BUILD_ROOT="$SCRIPT_DIR/out/linux"

remove_dir() {
  local target="$1"
  if [[ -z "$target" || "$target" == "/" ]]; then
    echo "Refusing to delete '$target'" >&2
    return
  fi
  if command -v node >/dev/null 2>&1; then
    node - "$target" <<'NODE'
const fs = require('fs');
const target = process.argv[1];
if (!target || target === '/' || target === '\\') process.exit(0);
try {
  fs.rmSync(target, { recursive: true, force: true });
} catch {}
NODE
  else
    rm -rf "$target"
  fi
}

echo "==> Preparing Linux artifacts in $BUILD_ROOT"
remove_dir "$BUILD_ROOT"
mkdir -p "$BUILD_ROOT"

sync_project() {
  local name="$1"
  local src="$REPO_ROOT/$name"
  local dest="$BUILD_ROOT/$name"

  if [[ ! -d "$src" ]]; then
    echo "Folder $name not found in $src" >&2
    exit 1
  fi

  echo "   -> Copying $name"
  remove_dir "$dest"
  mkdir -p "$dest"

  if command -v rsync >/dev/null 2>&1; then
    rsync -a --delete \
      --exclude=node_modules \
      --exclude=dist \
      --exclude=logs \
      --exclude=.turbo \
      --exclude=coverage \
      "$src"/ "$dest"/
  else
    cp -R "$src"/. "$dest"/
    remove_dir "$dest/node_modules"
    remove_dir "$dest/dist"
    remove_dir "$dest/logs"
    remove_dir "$dest/.turbo"
    remove_dir "$dest/coverage"
  fi
}

sync_project server
sync_project web-admin

echo "==> Installing dependencies and building server"
(cd "$BUILD_ROOT/server" && npm install --include=dev && npx prisma generate && npx prisma db push && npm run build)

echo "==> Installing dependencies and building web-admin"
(cd "$BUILD_ROOT/web-admin" && npm install --include=dev && npm run build)

cp "$SCRIPT_DIR/start-linux.sh" "$BUILD_ROOT/start-linux.sh"
cp "$SCRIPT_DIR/stop-linux.sh" "$BUILD_ROOT/stop-linux.sh"
chmod +x "$BUILD_ROOT/start-linux.sh" "$BUILD_ROOT/stop-linux.sh"

echo "✅ Build finished. Run deploy-linux.sh to publish."
