#!/bin/sh
set -eu
# Installs or updates ONE isolated preview loader. Never changes live site settings.
PACKAGE_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
[ -f wp-load.php ] || { echo "STOP: run from the intended WordPress root containing wp-load.php." >&2; exit 1; }
command -v php >/dev/null 2>&1 || { echo "STOP: PHP CLI is missing." >&2; exit 1; }
if [ -f /usr/local/bin/wordpress-cli ]; then
    wp_cli() { php /usr/local/bin/wordpress-cli "$@"; }
elif command -v wp >/dev/null 2>&1; then
    wp_cli() { wp "$@"; }
else
    echo "STOP: WP-CLI not found." >&2; exit 1
fi
wp_cli core is-installed
HOST=$(wp_cli eval 'echo (string) wp_parse_url(home_url(), PHP_URL_HOST);')
[ "$HOST" = "startlegacy.com.watari.ca" ] || { echo "STOP: wrong site: $HOST. This targets only startlegacy.com.watari.ca." >&2; exit 1; }
ENVIRONMENT=$(wp_cli eval 'echo wp_get_environment_type();')
[ "$ENVIRONMENT" = "staging" ] || { echo "STOP: environment is not staging. No settings were changed." >&2; exit 1; }
PUBLIC=$(wp_cli option get blog_public)
[ "$PUBLIC" = "0" ] || { echo "STOP: blog_public must already be 0. No settings were changed." >&2; exit 1; }
[ -d "$PACKAGE_DIR/site/assets" ] || { echo "STOP: package assets are missing." >&2; exit 1; }
php -l "$PACKAGE_DIR/wordpress/nuveris-private-design-preview.php"
MU_DIR=$(wp_cli eval 'echo WPMU_PLUGIN_DIR;')
[ -n "$MU_DIR" ] || { echo "STOP: missing MU-plugin path." >&2; exit 1; }
LOADER="$MU_DIR/nuveris-private-design-preview.php"
if [ -f "$LOADER" ] && ! grep -q 'Plugin Name: NUVERIS Private Design Preview' "$LOADER"; then
    echo "STOP: the target loader is not this managed preview. It was not changed." >&2; exit 1
fi
PRIVATE_ROOT="$HOME/.nuveris-design-preview"
WP_ROOT=$(pwd -P)
case "$PRIVATE_ROOT/" in "$WP_ROOT/"*) echo "STOP: private files must be outside the WordPress root." >&2; exit 1;; esac
umask 077
mkdir -p "$PRIVATE_ROOT" "$MU_DIR"
chmod 700 "$PRIVATE_ROOT"
STAMP=$(date +%Y%m%d-%H%M%S)-$$
RELEASE="$PRIVATE_ROOT/release-$STAMP"
BACKUP="$PRIVATE_ROOT/backup-$STAMP"
TEMP="$PRIVATE_ROOT/.install-$STAMP"
[ ! -e "$RELEASE" ] || { echo "STOP: release already exists." >&2; exit 1; }
mkdir "$TEMP" "$BACKUP"
trap 'rm -rf "$TEMP"' EXIT HUP INT TERM
if [ -f "$LOADER" ]; then
    cp -p "$LOADER" "$BACKUP/previous-loader.php"
    echo "Previous preview loader backed up: $BACKUP/previous-loader.php"
fi
cp -R "$PACKAGE_DIR/site" "$TEMP/site"
find "$TEMP/site" -type d -exec chmod 700 {} \;
find "$TEMP/site" -type f -exec chmod 600 {} \;
php -r '$s=file_get_contents($argv[1]);if($s===false){exit(1);}$s=str_replace("\x27__NUVERIS_PREVIEW_DATA__\x27",var_export($argv[2],true),$s);if(file_put_contents($argv[3],$s)===false){exit(1);}' "$PACKAGE_DIR/wordpress/nuveris-private-design-preview.php" "$RELEASE" "$TEMP/loader.php"
php -l "$TEMP/loader.php"
mv "$TEMP/site" "$RELEASE"
# Same-directory rename publishes the loader atomically; no partial PHP file is served.
cp "$TEMP/loader.php" "$MU_DIR/.nuveris-preview-$STAMP.tmp"
chmod 644 "$MU_DIR/.nuveris-preview-$STAMP.tmp"
mv "$MU_DIR/.nuveris-preview-$STAMP.tmp" "$LOADER"
printf '%s\n' "$RELEASE" > "$BACKUP/new-release-path.txt"
echo "PRIVATE PREVIEW READY. Existing page content, CSS, menus and plugins remain unchanged."
echo "No booking, form submission, payment, URL, indexing or access-protection setting was modified."
echo "Open while logged in to WordPress as an administrator:"
wp_cli eval 'echo admin_url("admin-post.php?action=nuveris_design_preview"), PHP_EOL;'
echo "Verify this preview URL and its assets return 403 while logged out."
echo "Backup folder: $BACKUP"
echo "Keep the package and private-data folder outside every public document root."
