#!/bin/bash
# CICLO-APP01 pipeline: ovftool → virt-v2v boot + qemu-img data (paralelo)
set -o pipefail
TS=$(date +%Y%m%d-%H%M%S)
VM_NAME=CICLO-APP01
VAPP=CICLO-APP01-MIGRATE
WORK_DIR=/NFS01/migrate/migrate-$VM_NAME-$TS
V2V_OUT=/NFS01/migrate/v2v-$VM_NAME-$TS
LOG=/NFS01/migrate/logs/$VM_NAME-$TS.log
mkdir -p "$WORK_DIR" "$V2V_OUT" /NFS01/migrate/logs

echo "=== $(date) START $VM_NAME pipeline ===" | tee -a "$LOG"

# STAGE 1: ovftool extract
echo "=== $(date) STAGE 1: ovftool extract vApp=$VAPP ===" | tee -a "$LOG"
cd ~/ovftool || exit 1
./ovftool --schemaValidate=false --noSSLVerify \
  "vcloud://tarx:A0S6VeOPbLNP%21RKBtpx%2191y2%25IZlF4@vcd-tio.unifique.cloud:443?org=447986_TARX_ORG&vdc=447986_TARX_VDC-DC-SC-TIO-01&vapp=$VAPP" \
  "$WORK_DIR/" 2>&1 | tee -a "$LOG"
OVFTOOL_RC=${PIPESTATUS[0]}
echo "=== $(date) ovftool exit=$OVFTOOL_RC ===" | tee -a "$LOG"
[ "$OVFTOOL_RC" -ne 0 ] && exit "$OVFTOOL_RC"

ls -la "$WORK_DIR/" "$WORK_DIR/$VAPP/" 2>&1 | tee -a "$LOG"

# Find VMDK files dynamically
DISK1=$(find "$WORK_DIR" -maxdepth 3 -name "*-disk1.vmdk" | head -1)
DISK2=$(find "$WORK_DIR" -maxdepth 3 -name "*-disk2.vmdk" | head -1)
echo "DISK1=$DISK1" | tee -a "$LOG"
echo "DISK2=$DISK2" | tee -a "$LOG"

# STAGE 2: virt-v2v boot (sudo) + qemu-img data, paralelo
echo "=== $(date) STAGE 2a: virt-v2v boot (sudo) ===" | tee -a "$LOG.boot"
(
  echo "In0v@t3ch" | sudo -S bash -c "VIRTIO_WIN=/tmp/virtio-win.iso virt-v2v -v -x \
    -i disk  \
    -o local -of qcow2 -os  \
    -on $VM_NAME-boot" >> "$LOG.boot" 2>&1
  echo "=== $(date) virt-v2v exit=$? ===" >> "$LOG.boot"
) &
PID_BOOT=$!

if [ -n "$DISK2" ]; then
  echo "=== $(date) STAGE 2b: qemu-img data ===" | tee -a "$LOG.data"
  (
    qemu-img convert -p -O qcow2 "$DISK2" "$V2V_OUT/$VM_NAME-data.qcow2" >> "$LOG.data" 2>&1
    echo "=== $(date) qemu-img exit=$? ===" >> "$LOG.data"
  ) &
  PID_DATA=$!
fi

echo "PID_BOOT=$PID_BOOT PID_DATA=${PID_DATA:-none}" | tee -a "$LOG"
wait $PID_BOOT; RC_BOOT=$?
[ -n "$PID_DATA" ] && { wait $PID_DATA; RC_DATA=$?; } || RC_DATA=0
echo "=== $(date) v2v done boot_rc=$RC_BOOT data_rc=$RC_DATA ===" | tee -a "$LOG"
ls -lh "$V2V_OUT" | tee -a "$LOG"

# STAGE 3: dispara upload (com creds via sudo)
echo "=== $(date) STAGE 3: upload (no sudo wrapper) ===" | tee -a "$LOG"
# Move qcow2 to serve dir
SERVE_DIR=/NFS01/migrate/$VM_NAME
mkdir -p "$SERVE_DIR"
echo "In0v@t3ch" | sudo -S bash -c "mv $V2V_OUT/$VM_NAME-boot-sda $SERVE_DIR/$VM_NAME-disk-0.qcow2 && chmod 644 $SERVE_DIR/*.qcow2" 2>&1 | tee -a "$LOG"
[ -f "$V2V_OUT/$VM_NAME-data.qcow2" ] && mv "$V2V_OUT/$VM_NAME-data.qcow2" "$SERVE_DIR/$VM_NAME-disk-1.qcow2"
chmod 644 "$SERVE_DIR/"*.qcow2 2>/dev/null
echo "moved to $SERVE_DIR/" | tee -a "$LOG"
ls -lh "$SERVE_DIR/" | tee -a "$LOG"

# POST uploadVolume + poll usando run-sante-upload-only.sh adaptado
echo "In0v@t3ch" | sudo -S bash /NFS01/migrate/run-sante-upload-only.sh "$VM_NAME" 2>&1 | tee -a "$LOG"
echo "=== $(date) PIPELINE DONE ===" | tee -a "$LOG"
