#!/usr/bin/env bash

set -Eeuo pipefail
umask 077

readonly TARGET_HOST=sqjcnginx02
readonly TARGET_IP=10.2.203.103
readonly Q102_ARCHIVE=/root/q102-nginx02-activation-20260729.tar.gz
readonly Q102_ARCHIVE_SHA256=f034270d0043171e9df5f7c031528df8f242da40b603a687b3f54b3e85eb7a1e
readonly Q102_DIR=/root/q102-nginx02-activation
readonly Q102_RUN_ID="q102-manual-$(date -u +%Y%m%dT%H%M%SZ)"
readonly Q102_STATIC_ROOT="/root/q102-static-evidence-${Q102_RUN_ID}"
readonly Q102_AUDIT_ROOT=/root/q102-manual-upload-audit
readonly Q102_AUDIT_LOG="${Q102_AUDIT_ROOT}/${Q102_RUN_ID}-static-preflight.log"

mkdir -p "$Q102_AUDIT_ROOT"
chmod 0700 "$Q102_AUDIT_ROOT"
exec > >(tee -a "$Q102_AUDIT_LOG") 2>&1

q102_finish() {
  rc=$?
  trap - EXIT
  printf 'Q102_AUDIT_LOG=%s\n' "$Q102_AUDIT_LOG"
  printf 'Q102_MANUAL_UPLOAD_STATIC_PREFLIGHT_END RC=%s\n' "$rc"
  exit "$rc"
}
trap q102_finish EXIT

printf 'Q102_MANUAL_UPLOAD_STATIC_PREFLIGHT_BEGIN\n'
printf 'Q102_RUN_ID=%s\n' "$Q102_RUN_ID"
printf 'Q102_TARGET_HOST=%s\n' "$TARGET_HOST"
printf 'Q102_TARGET_IP=%s\n' "$TARGET_IP"
date --iso-8601=seconds

printf 'Q102_STEP=TARGET_IDENTITY_READONLY\n'
test "$(hostname -s)" = "$TARGET_HOST"
ip -o -4 addr show scope global
ip -o -4 addr show scope global |
  awk '{print $4}' |
  cut -d/ -f1 |
  grep -Fxq "$TARGET_IP"
printf 'Q102_TARGET_IDENTITY_READONLY=PASS\n'

printf 'Q102_STEP=OUTER_SHA256\n'
cd /root
test -f "$Q102_ARCHIVE"
actual_archive_sha256=$(sha256sum "$Q102_ARCHIVE" | awk '{print $1}')
printf 'Q102_ARCHIVE_SHA256=%s\n' "$actual_archive_sha256"
test "$actual_archive_sha256" = "$Q102_ARCHIVE_SHA256"
printf 'Q102_OUTER_SHA256=PASS\n'

printf 'Q102_STEP=EXTRACT_OR_VALIDATE_EXISTING\n'
if test -e "$Q102_DIR"; then
  test -d "$Q102_DIR"
  printf 'Q102_EXISTING_EXTRACT_DIR=YES\n'
  stat -c 'PATH=%n TYPE=%F MODE=%a OWNER=%U:%G SIZE=%s MTIME=%y' "$Q102_DIR"
else
  printf 'Q102_EXISTING_EXTRACT_DIR=NO\n'
  tar -xzf "$Q102_ARCHIVE" -C /root
fi

test -d "$Q102_DIR"
cd "$Q102_DIR"
test -f SHA256SUMS
test -f README.md
test -f q102-nginx02.sh
sha256sum -c SHA256SUMS
bash -n q102-nginx02.sh
test -x q102-nginx02.sh
stat -c 'ENTRY_SCRIPT MODE=%a OWNER=%U:%G SIZE=%s' q102-nginx02.sh
printf 'Q102_EXTRACT_OR_EXISTING_DIR_INNER_GATE=PASS\n'

printf 'Q102_STEP=STATIC_VALIDATE\n'
env \
  Q102_RUN_ID="${Q102_RUN_ID}-static" \
  Q102_EVIDENCE_ROOT="$Q102_STATIC_ROOT" \
  ./q102-nginx02.sh --static-validate

while IFS= read -r evidence_file; do
  printf 'Q102_STATIC_EVIDENCE_FILE=%s\n' "$evidence_file"
  sed -n '1,240p' "$evidence_file"
done < <(find "$Q102_STATIC_ROOT" -type f | sort)

grep -R -Fq 'Q102_STATIC_VALIDATE_PASS' "$Q102_STATIC_ROOT"
grep -R -Fq 'Q102_RC=0' "$Q102_STATIC_ROOT"
printf 'Q102_STATIC_VALIDATE_GATE=PASS\n'

printf 'Q102_STEP=PREFLIGHT_READONLY\n'
env \
  Q102_RUN_ID="$Q102_RUN_ID" \
  Q102_REMOTE_LOCK_GRANTED=1 \
  Q102_REMOTE_LOCK_OWNER=NGINX_Q102 \
  Q102_SECRET_SOURCE_CONFIRMATION=Q101_NGINX01_CLONE_PRESERVED_CONFIRMED_BY_GLOBAL \
  ./q102-nginx02.sh preflight

test -f "/var/backups/zhct-q102/evidence/${Q102_RUN_ID}/preflight.pass"
grep -R -Fq 'Q102_PREFLIGHT_PASS' \
  "/var/backups/zhct-q102/evidence/${Q102_RUN_ID}"
grep -R -Fq 'Q102_RC=0' \
  "/var/backups/zhct-q102/evidence/${Q102_RUN_ID}"
printf 'Q102_PREFLIGHT_READONLY_GATE=PASS\n'
