#!/bin/bash
# ntfsfix -> virt-v2v -> renomeia -> fix-boot-windows.sh. Rodar NO nfs01.
# uso: SUDOPW=... bash boot-2-v2v.sh <NOME-DEST> <numero-do-disco>
#  ex: SUDOPW=In0v@t3ch bash boot-2-v2v.sh CHPL-WCI 0
set -eu
DEST="${1:?nome destino}"; N="${2:-0}"
: "${SUDOPW:?exporte SUDOPW}"
D=/NFS01/migrate/$DEST
IN="$D/$DEST-disk-$N.qcow2"
S() { echo "$SUDOPW" | sudo -S "$@"; }
mkdir -p "$D/v2vtmp" && chmod 777 "$D/v2vtmp"
export LIBGUESTFS_BACKEND=direct LIBGUESTFS_CACHEDIR="$D/v2vtmp" TMPDIR="$D/v2vtmp"

echo "=== [1] ntfsfix (o dirty bit aborta o virt-v2v mesmo com qmshutdown OK)"
S modprobe nbd max_part=16
S qemu-nbd -c /dev/nbd0 "$IN"; sleep 5; S partprobe /dev/nbd0 || true
lsblk /dev/nbd0 || true
GPT=nao; S fdisk -l /dev/nbd0 2>/dev/null | grep -qi "disklabel type: gpt" && GPT=sim   # sgdisk -p NAO imprime a palavra GPT
for P in /dev/nbd0p*; do
  T=$(S blkid -o value -s TYPE "$P" 2>/dev/null || true); echo "  $P tipo=$T"
  [ "$T" = "ntfs" ] && S ntfsfix -d "$P" || true
done
S qemu-nbd -d /dev/nbd0; sleep 2
echo "  tabela GPT? $GPT   (GPT/UEFI -> roda fix-boot; MBR -> NAO rodar)"

echo "=== [2] virt-v2v"
S env LIBGUESTFS_BACKEND=direct LIBGUESTFS_CACHEDIR="$D/v2vtmp" TMPDIR="$D/v2vtmp" \
   VIRTIO_WIN=/tmp/virtio-win.iso \
   virt-v2v -v -x -i disk "$IN" -o local -of qcow2 -os "$D" -on "$DEST-boot"

echo "=== [3] renomear (-o local gera <nome>-sda sem extensao)"
[ -f "$D/$DEST-boot-sda" ] && S mv "$D/$DEST-boot-sda" "$D/$DEST-boot.qcow2"
S qemu-img info "$D/$DEST-boot.qcow2" | head -4

if [ "$GPT" = sim ]; then
  echo "=== [4] fix-boot-windows.sh (GPT -> MBR)"
  S bash /NFS01/migrate/fix-boot-windows.sh "$D/$DEST-boot.qcow2"
else
  echo "=== [4] PULADO: origem ja e MBR (rodar fix-boot aqui DESTRUIRIA o boot)"
fi

echo "=== [5] layout final"
S qemu-nbd -c /dev/nbd0 "$D/$DEST-boot.qcow2"; sleep 4; S partprobe /dev/nbd0 || true
S fdisk -l /dev/nbd0
S qemu-nbd -d /dev/nbd0
echo "=== FIM OK  -> proximo: copiar $D/$DEST-boot.qcow2 para o volume, depois bcdboot"
