#!/bin/bash
WHM_TOKEN="F0NQLBN5ZN7P3HULA2LU1UUA517GMXDY"
TARGET="communitymarketp"
TARGET_HOME="/home/communitymarketp"
DEST="$TARGET_HOME/public_html"
BACKUP_DIR="/home/migration_backups"
LOG="$BACKUP_DIR/migration_v2_$(date +%Y%m%d_%H%M%S).log"
ERR_LOG="$BACKUP_DIR/errors_v2.log"
CREDS="$BACKUP_DIR/credentials.txt"

mkdir -p "$BACKUP_DIR"
touch "$CREDS" && chmod 600 "$CREDS"

log()  { echo "[$(date +%H:%M:%S)] $*" | tee -a "$LOG"; }
err()  { echo "[$(date +%H:%M:%S)] ERROR: $*" | tee -a "$LOG" "$ERR_LOG"; }

cpapi() {
  curl -sk -H "Authorization: whm root:$WHM_TOKEN" \
    "https://localhost:2087/json-api/cpanel" \
    --data-urlencode "cpanel_jsonapi_user=$TARGET" "$@"
}

add_addon() {
  local DOMAIN=$1 REL_DIR=$2
  local SUB=$(echo "$DOMAIN" | sed 's/\..*//')
  log "Removing conflicting subdomain ${SUB}.communitymarketplace.ca..."
  cpapi --data-urlencode "cpanel_jsonapi_module=SubDomain" \
        --data-urlencode "cpanel_jsonapi_func=delsubdomain" \
        --data-urlencode "domain=${SUB}.communitymarketplace.ca" >> "$LOG" 2>>"$ERR_LOG"
  log "Adding addon domain $DOMAIN → $REL_DIR"
  cpapi --data-urlencode "cpanel_jsonapi_module=AddonDomain" \
        --data-urlencode "cpanel_jsonapi_func=addaddondomain" \
        --data-urlencode "newdomain=$DOMAIN" \
        --data-urlencode "subdomain=$SUB" \
        --data-urlencode "dir=$REL_DIR" 2>>"$ERR_LOG" | python3 -c "
import sys,json
try:
  d=json.load(sys.stdin)
  r=d.get('cpanelresult',{}).get('data',[{}])[0]
  print('  Addon:', r.get('result','?'), r.get('reason',''))
except Exception as e: print('  Parse error:', e)
" | tee -a "$LOG"
}

migrate() {
  local DOMAIN=$1 OLD_USER=$2 NEW_DB=$3
  local DEST_DIR="$DEST/$DOMAIN"
  local REL_DIR="public_html/$DOMAIN"
  local NEW_DBUSER=$(echo "${TARGET}_${DOMAIN}" | sed 's/[^a-zA-Z0-9_]/_/g' | cut -c1-32)
  local NEW_PASS="Cmktp_$(openssl rand -hex 8)"

  log "=============================="
  log "Migrating: $DOMAIN (from $OLD_USER)"
  log "=============================="

  if [ ! -d "/home/$OLD_USER" ]; then
    err "$OLD_USER not found — skipping $DOMAIN"; return 1
  fi

  if [ -d "$DEST_DIR" ] && [ -n "$(ls -A $DEST_DIR 2>/dev/null)" ]; then
    log "Files already exist — skipping rsync"
  else
    mkdir -p "$DEST_DIR"
    log "Rsyncing files..."
    rsync -a /home/$OLD_USER/public_html/ "$DEST_DIR/" 2>>"$ERR_LOG"
    log "rsync complete"
  fi

  OLD_DB=$(mysql -u root -N -e \
    "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME LIKE '${OLD_USER}%' ORDER BY SCHEMA_NAME LIMIT 1;" \
    2>>"$ERR_LOG")

  if [ -z "$OLD_DB" ]; then
    err "No DB found for $OLD_USER — skipping DB steps"
  else
    log "DB: $OLD_DB → $NEW_DB"
    mysql -u root 2>>"$ERR_LOG" <<SQL
CREATE DATABASE IF NOT EXISTS \`${NEW_DB}\`;
CREATE USER IF NOT EXISTS '${NEW_DBUSER}'@'localhost' IDENTIFIED BY '${NEW_PASS}';
GRANT ALL PRIVILEGES ON \`${NEW_DB}\`.* TO '${NEW_DBUSER}'@'localhost';
FLUSH PRIVILEGES;
SQL
    DUMP="$BACKUP_DIR/${OLD_USER}_$(date +%Y%m%d_%H%M%S).sql.gz"
    log "Dumping and importing DB..."
    mysqldump -u root "$OLD_DB" 2>>"$ERR_LOG" | gzip > "$DUMP"
    zcat "$DUMP" | mysql -u root "$NEW_DB" 2>>"$ERR_LOG"
    log "DB import complete"
  fi

  CONFIG="$DEST_DIR/configuration.php"
  if [ -f "$CONFIG" ]; then
    cp "$CONFIG" "${CONFIG}.bak"
    sed -i "s/public \$db = '[^']*'/public \$db = '$NEW_DB'/" "$CONFIG"
    sed -i "s/public \$user = '[^']*'/public \$user = '$NEW_DBUSER'/" "$CONFIG"
    sed -i "s/public \$password = '[^']*'/public \$password = '$NEW_PASS'/" "$CONFIG"
    sed -i "s/public \$live_site = '[^']*'/public \$live_site = 'https:\/\/$DOMAIN'/" "$CONFIG"
    log "configuration.php updated"
    grep -E "public \\\$db|public \\\$user|public \\\$password" "$CONFIG" | tee -a "$LOG"
  else
    err "configuration.php not found at $CONFIG"
  fi

  add_addon "$DOMAIN" "$REL_DIR"
  echo "$DOMAIN|$NEW_DB|$NEW_DBUSER|$NEW_PASS" >> "$CREDS"
  log "Done: $DOMAIN"
}

log "Starting migration to $TARGET"

log "--- Ensuring existing slave sites ---"
add_addon "e-newsletterhero.com"   "public_html/e-newsletterhero.com"
add_addon "icanhero.com"           "public_html/icanhero.com"
add_addon "studio.icanhero.com"    "public_html/icanhero.com/joomla30"

log "--- Migrating remaining slave sites ---"
migrate "just1vote.ca"                "just1voteca"      "communitymarketp_just1vote"
migrate "greatlifeinvestmentfund.com" "greatlife"        "communitymarketp_greatlife"
migrate "communitygetaways.com"       "communitygetaway" "communitymarketp_getaways"
migrate "communitymusicmatters.com"   "communitymusic"   "communitymarketp_music"

log "--- Final addon domain list ---"
cpapi --data-urlencode "cpanel_jsonapi_module=AddonDomain" \
      --data-urlencode "cpanel_jsonapi_func=listaddondomain" 2>>"$ERR_LOG" | python3 -c "
import sys,json
try:
  d=json.load(sys.stdin)
  domains=d.get('cpanelresult',{}).get('data',[])
  print(f'Total: {len(domains)} addon domains')
  for x in domains: print(f\"  ✅ {x.get('domain')} → {x.get('dir')}\")
except Exception as e: print('Parse error:', e)
" | tee -a "$LOG"

log "ALL DONE — Credentials: $CREDS | Log: $LOG | Errors: $ERR_LOG"
cat "$CREDS"
