#!/usr/bin/env bash
# Fixture test for bin/import-module.sh: junk stripped, prefix applied, history
# preserved, planted secret aborts, dirty source refused.
set -euo pipefail
ROOT=$(cd "$(dirname "$0")/../.." && pwd)
FIX=$(mktemp -d "${TMPDIR:-/tmp}/import-test-XXXXXX")
trap 'rm -rf "$FIX"' EXIT
pass=0; fail=0
ok()  { echo "  PASS: $1"; pass=$((pass+1)); }
bad() { echo "  FAIL: $1"; fail=$((fail+1)); }

mk_src() { # $1=dir $2=with_secret
  git init -q "$1"; cd "$1"
  git -c user.email=t@t -c user.name=t commit -q --allow-empty -m init
  mkdir -p tmp real
  echo junk > tmp/j.txt; echo code1 > real/a.txt
  git add .; git -c user.email=t@t -c user.name=t commit -qm "c1"
  echo code2 > real/b.txt
  [[ "$2" == secret ]] && echo 'token = "ghp_Zx9kQw3rTy8uIo2pAs4dFg6hJk1lMn5bVc7x"' > real/creds.txt
  git add .; git -c user.email=t@t -c user.name=t commit -qm "c2"
  cd - >/dev/null
}

mk_dest() { # $1=dir
  git init -q -b feat/ai-os-foundation "$1"; cd "$1"
  mkdir -p docs/specs modules
  touch docs/specs/.keep
  git add .; git -c user.email=t@t -c user.name=t commit -qm base
  cd - >/dev/null
}

export IMPORT_BUNDLE_DIR="$FIX/bundles"; mkdir -p "$IMPORT_BUNDLE_DIR"

echo "=== test 1: clean import — junk stripped, prefix, history preserved ==="
mk_src "$FIX/src1" nosecret
git -C "$FIX/src1" bundle create -q "$IMPORT_BUNDLE_DIR/monitor-pre-ai-os.bundle" --all
mk_dest "$FIX/dest1"
if (cd "$FIX/dest1" && "$ROOT/bin/import-module.sh" "$FIX/src1" monitor >/dev/null 2>&1); then
  [[ -f "$FIX/dest1/modules/monitor/real/a.txt" ]] && ok "prefix applied" || bad "prefix missing"
  [[ ! -e "$FIX/dest1/modules/monitor/tmp" ]] && ok "junk stripped" || bad "junk survived"
  n=$(git -C "$FIX/dest1" log --oneline -- modules/monitor | wc -l)
  [[ "$n" -ge 2 ]] && ok "history preserved ($n commits)" || bad "history flattened ($n)"
else bad "clean import exited nonzero"; fi

echo "=== test 2: planted secret aborts merge ==="
mk_src "$FIX/src2" secret
git -C "$FIX/src2" bundle create -q "$IMPORT_BUNDLE_DIR/systray-pre-ai-os.bundle" --all
mk_dest "$FIX/dest2"
if (cd "$FIX/dest2" && "$ROOT/bin/import-module.sh" "$FIX/src2" systray >/dev/null 2>&1); then
  bad "secret import DID NOT abort"
else
  [[ ! -e "$FIX/dest2/modules/systray" ]] && ok "secret aborted before merge" || bad "partial merge left behind"
fi

echo "=== test 3: dirty source refused ==="
mk_src "$FIX/src3" nosecret
git -C "$FIX/src3" bundle create -q "$IMPORT_BUNDLE_DIR/security-pre-ai-os.bundle" --all
echo dirty > "$FIX/src3/real/dirty.txt"
mk_dest "$FIX/dest3"
if (cd "$FIX/dest3" && "$ROOT/bin/import-module.sh" "$FIX/src3" security >/dev/null 2>&1); then
  bad "dirty source NOT refused"
else ok "dirty source refused"; fi

echo "=== test 4: missing bundle refused ==="
mk_src "$FIX/src4" nosecret
mk_dest "$FIX/dest4"
if (cd "$FIX/dest4" && "$ROOT/bin/import-module.sh" "$FIX/src4" harness >/dev/null 2>&1); then
  bad "missing bundle NOT refused"
else ok "missing bundle refused"; fi

echo "----"
echo "PASS=$pass FAIL=$fail"
[[ $fail -eq 0 ]]
