#!/usr/bin/env bash
set -Eeuo pipefail
BASE='/opt/router-ops'
STEP_DIR='/opt/router-ops/steps/20260716-212134_STEP_050M07R15B2_GENERATION_BUILDER_R01'
TARGET_BASE='/var/lib/router-egress-recovery/steps/STEP_050M07R15B2_GENERATION_BUILDER_R01'
MACHINE_CLOSE='/opt/router-ops/bin/router-machine-close'
TOKEN_FILE='/opt/router-ops/public/.router-public-token'
STATE_DIR='/opt/router-ops/state'

LAUNCHER="$(mktemp)"
trap 'rm -f "$LAUNCHER"' EXIT
cat > "$LAUNCHER" <<'REMOTE'
#!/bin/sh
set -eu
TARGET_BASE='/var/lib/router-egress-recovery/steps/STEP_050M07R15B2_GENERATION_BUILDER_R01'
if [ -x "$TARGET_BASE/rollback-target.sh" ]; then
    exec /bin/sh "$TARGET_BASE/rollback-target.sh"
fi
echo RESULT=PASS_R15B2_TARGET_ROLLBACK_NOT_REQUIRED
REMOTE
sh -n "$LAUNCHER"
ssh -o BatchMode=yes pve-mgts "ssh -o BatchMode=yes -i /root/.ssh/pve_to_openwrt_mgts_ed25519 root@10.71.100.2 'sh -s'" < "$LAUNCHER"

if grep -qx 'RESULT=PASS_ROUTER_MACHINE_CLOSE' "$STEP_DIR/router-machine-close.log" 2>/dev/null; then
    "$MACHINE_CLOSE" vm101 'ROLLBACK_R15B2: remove staged generation builder and restore source'
else
    echo MACHINE_GIT_ROLLBACK=NOT_REQUIRED
fi

TOKEN="$(cat "$TOKEN_FILE")"
LATEST="$BASE/public/r/$TOKEN/latest"
OLD="$BASE/public/r/$TOKEN/old"
for kind in model methods plan; do
    NEW_FILE="$STEP_DIR/new-$kind-folder.txt"
    PREV_FILE="$STEP_DIR/previous-$kind-folder.txt"
    [[ -s "$NEW_FILE" && -s "$PREV_FILE" ]] || continue
    NEW="$(cat "$NEW_FILE")"
    PREV="$(cat "$PREV_FILE")"
    if [[ -d "$LATEST/$NEW" ]]; then
        mv "$LATEST/$NEW" "$OLD/$NEW"
        [[ -d "$OLD/$PREV" && ! -e "$LATEST/$PREV" ]] && mv "$OLD/$PREV" "$LATEST/$PREV"
    else
        echo "PUBLICATION_ROLLBACK_$kind=SKIPPED_NOT_CURRENT"
    fi
done
"$BASE/bin/router-public-reindex"

for f in current-vm101-model.env current-vm101-methods.env current-vm101-local-plan.env; do
    [[ ! -f "$STEP_DIR/state-backup/$f" ]] || cp -a "$STEP_DIR/state-backup/$f" "$STATE_DIR/$f"
done

echo RESULT=PASS_R15B2_ROLLBACK
echo RUNTIME_STATE_RESTORED=true
echo PUBLICATION_STATE_RESTORED=true
