#!/usr/bin/env bash

set -euo pipefail

# Safe production deploy for Drupal:
# - Syncs code to origin/main deterministically
# - Runs composer install, drush updb, drush cr
# - Never runs drush cim automatically
# - Warns if config drift exists (so user/admin config is not overwritten)

REMOTE="${REMOTE:-origin}"
BRANCH="${BRANCH:-main}"
DO_CLEAN=0

for arg in "$@"; do
  case "$arg" in
    --clean)
      DO_CLEAN=1
      ;;
    *)
      echo "Unknown argument: $arg"
      echo "Usage: $0 [--clean]"
      exit 1
      ;;
  esac
done

echo "==> Pre-check"
command -v git >/dev/null || { echo "git not found"; exit 1; }
command -v composer >/dev/null || { echo "composer not found"; exit 1; }
command -v drush >/dev/null || { echo "drush not found"; exit 1; }

if [[ -n "$(git status --porcelain)" ]]; then
  echo "Working tree is not clean. Commit/stash/discard local changes first."
  git status --short
  exit 1
fi

echo "==> Sync code to ${REMOTE}/${BRANCH}"
git fetch "$REMOTE"
git checkout "$BRANCH"
git reset --hard "${REMOTE}/${BRANCH}"

if [[ "$DO_CLEAN" -eq 1 ]]; then
  echo "==> Cleaning untracked files (git clean -fd)"
  git clean -fd
else
  echo "==> Skipping git clean (use --clean to enable)"
fi

echo "==> Install dependencies"
composer install --no-dev -o

echo "==> Run Drupal updates"
drush updb -y
drush cr

echo "==> Check config drift (no import)"
if drush cst 2>/dev/null | grep -qE "No differences|there are no changes"; then
  echo "Config status: clean"
else
  echo "Config status: differences detected"
  echo "Review before any config import:"
  echo "  drush cst"
  echo "  # optional: drush cex -y (to preserve prod changes into sync dir)"
fi

echo "==> Done"
