#!/usr/bin/env bash
set -Eeuo pipefail
APP_ROOT="/var/www/app.yachtmemory.net"
ARCHIVE_ROOT="${APP_ROOT}/archive/install-packages"
PACKAGE_NAME="YachtMemory_2C2b4_install"
STAMP="$(date '+%Y%m%d-%H%M%S')"
ARCHIVE_DIR="${ARCHIVE_ROOT}/${STAMP}_${PACKAGE_NAME}"
BACKUP_DIR="${ARCHIVE_DIR}/backup"
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
PAYLOAD="${SCRIPT_DIR}/payload"
FILES=("src/services/AnchorageGeocoder.php" "shared_dashboard/scripts/geocode_anchorages.php")
fail(){ echo "ERROR: $*" >&2; exit 1; }

echo "YachtMemory installer - Phase 2C.2b.4"
echo "============================================================"
[[ "$(pwd -P)" == "$APP_ROOT" ]] || fail "Run from $APP_ROOT"
for f in "${FILES[@]}"; do [[ -f "$PAYLOAD/$f" ]] || fail "Missing payload: $f"; done

echo "[1/6] Checking package PHP syntax"
for f in "${FILES[@]}"; do php -l "$PAYLOAD/$f" >/dev/null; echo "  OK $f"; done

echo "[2/6] Creating archive and backups"
mkdir -p "$BACKUP_DIR"
for f in "${FILES[@]}"; do
  if [[ -f "$APP_ROOT/$f" ]]; then
    mkdir -p "$BACKUP_DIR/$(dirname "$f")"
    cp -a "$APP_ROOT/$f" "$BACKUP_DIR/$f"
    echo "  BACKUP $f"
  fi
done

echo "[3/6] Installing files"
for f in "${FILES[@]}"; do
  mkdir -p "$APP_ROOT/$(dirname "$f")"
  cp -a "$PAYLOAD/$f" "$APP_ROOT/$f"
  echo "  INSTALLED $f"
done

echo "[4/6] Checking installed PHP syntax"
for f in "${FILES[@]}"; do
  if ! php -l "$APP_ROOT/$f" >/dev/null; then
    echo "Syntax error after installation. Restoring backups." >&2
    for b in "${FILES[@]}"; do
      [[ -f "$BACKUP_DIR/$b" ]] && cp -a "$BACKUP_DIR/$b" "$APP_ROOT/$b"
    done
    fail "Installation rolled back."
  fi
  echo "  OK $f"
done

echo "[5/6] Archiving ZIP files from application root"
mkdir -p "$ARCHIVE_DIR/packages"
shopt -s nullglob
ZIPS=("$APP_ROOT"/*.zip "$APP_ROOT"/*.ZIP)
for z in "${ZIPS[@]}"; do mv -- "$z" "$ARCHIVE_DIR/packages/"; echo "  ARCHIVED $(basename "$z")"; done
((${#ZIPS[@]})) || echo "  No ZIP files found."
shopt -u nullglob

echo "[6/6] Finalizing"
printf 'Package: %s\nInstalled: %s\n' "$PACKAGE_NAME" "$(date --iso-8601=seconds)" > "$ARCHIVE_DIR/installation.txt"
echo "Installation successful."
echo "Archive: $ARCHIVE_DIR"
echo "Test: php shared_dashboard/scripts/geocode_anchorages.php 1 47 58 72 76"

cd "$APP_ROOT"
if [[ "$SCRIPT_DIR" == "$APP_ROOT/$PACKAGE_NAME" && -d "$SCRIPT_DIR" ]]; then
  mv -- "$SCRIPT_DIR" "$ARCHIVE_DIR/installer"
  echo "Installer archived."
fi
