#!/bin/bash
# Run AFTER virt-v2v + qemu-img finish.
# Moves qcow2 to apache serve dir + dispatches uploadVolume in parallel + polls READY.
set -o pipefail
set -e
VM_NAME="${1:-SANTE-WINT-ACESSOS}"
V2V_OUT=/NFS01/migrate/v2v-sante-acessos-20260618-214203
SERVE_DIR=/NFS01/migrate/$VM_NAME
LOG=/NFS01/migrate/logs/upload-$VM_NAME-$(date +%Y%m%d-%H%M%S).log
source /etc/wevy/sante-creds.env  # WEVY_*, TRANSFER_BASE

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

# 1. Validate inputs
BOOT_QCOW2="$V2V_OUT/SANTE-WINT-ACESSOS-boot-sda"   # virt-v2v outputs <on>-sda
DATA_QCOW2="$V2V_OUT/SANTE-WINT-ACESSOS-data.qcow2"
[ -f "$BOOT_QCOW2" ] || { echo "MISSING boot qcow2 $BOOT_QCOW2"; exit 2; }
[ -f "$DATA_QCOW2" ] || { echo "MISSING data qcow2 $DATA_QCOW2"; exit 3; }
echo "BOOT: $(ls -lh $BOOT_QCOW2)" | tee -a "$LOG"
echo "DATA: $(ls -lh $DATA_QCOW2)" | tee -a "$LOG"

# 2. Move to apache serve dir (with .qcow2 extension — apache wont serve without)
mkdir -p "$SERVE_DIR"
mv "$BOOT_QCOW2" "$SERVE_DIR/$VM_NAME-disk-0.qcow2"
mv "$DATA_QCOW2" "$SERVE_DIR/$VM_NAME-disk-1.qcow2"
chmod 644 "$SERVE_DIR/"*.qcow2
echo "moved to $SERVE_DIR/" | tee -a "$LOG"
ls -lh "$SERVE_DIR/" | tee -a "$LOG"

# 3. Smoke-test URL access
for D in disk-0 disk-1; do
  URL="$TRANSFER_BASE/$VM_NAME/$VM_NAME-$D.qcow2"
  RC=$(curl -sI -o /dev/null -w "%{http_code}" "$URL")
  echo "URL $URL -> HTTP $RC" | tee -a "$LOG"
  [ "$RC" = "200" ] || { echo "URL not reachable"; exit 4; }
done

# 4. uploadVolume in parallel
for D in disk-0 disk-1; do
  VOL_NAME="$VM_NAME-$D"
  URL="$TRANSFER_BASE/$VM_NAME/$VOL_NAME.qcow2"
  echo "POST uploadVolume $VOL_NAME from $URL" | tee -a "$LOG"
  curl -s -X POST "$WEVY_API_URL/restapi/volume/uploadVolume" \
    -H "apikey: $WEVY_API_KEY" \
    -H "secretkey: $WEVY_SECRET_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"name\":\"$VOL_NAME\",\"format\":\"QCOW2\",\"url\":\"$URL\",\"zoneUuid\":\"$WEVY_ZONE_UUID\"}" \
    | tee -a "$LOG"
  echo | tee -a "$LOG"
done

# 5. Poll volumeList until both READY
echo "=== $(date) Polling volumes til READY ===" | tee -a "$LOG"
for i in $(seq 1 240); do
  RESP=$(curl -s "$WEVY_API_URL/restapi/volume/volumeList?zoneUuid=$WEVY_ZONE_UUID" \
    -H "apikey: $WEVY_API_KEY" -H "secretkey: $WEVY_SECRET_KEY")
  STATUS_BOOT=$(echo "$RESP" | python3 -c "import sys,json; r=json.load(sys.stdin); print(next((v[\"status\"] for v in r.get(\"listVolumeResponse\",[]) if v.get(\"name\")==\"$VM_NAME-disk-0\"), \"NOT_FOUND\"))")
  STATUS_DATA=$(echo "$RESP" | python3 -c "import sys,json; r=json.load(sys.stdin); print(next((v[\"status\"] for v in r.get(\"listVolumeResponse\",[]) if v.get(\"name\")==\"$VM_NAME-disk-1\"), \"NOT_FOUND\"))")
  echo "$(date) try=$i boot=$STATUS_BOOT data=$STATUS_DATA" | tee -a "$LOG"
  if [ "$STATUS_BOOT" = "Ready" ] && [ "$STATUS_DATA" = "Ready" ]; then
    echo "=== $(date) BOTH READY ===" | tee -a "$LOG"
    break
  fi
  sleep 30
done

# 6. Final state
curl -s "$WEVY_API_URL/restapi/volume/volumeList?zoneUuid=$WEVY_ZONE_UUID" \
  -H "apikey: $WEVY_API_KEY" -H "secretkey: $WEVY_SECRET_KEY" \
  | python3 -m json.tool 2>/dev/null | grep -A1 -B1 "$VM_NAME" | tee -a "$LOG"
echo "=== $(date) DONE ===" | tee -a "$LOG"
