#!/usr/bin/env bash
set -euo pipefail

EXCLUDE_REGEX='^(KCSW-WSNOC|KCSW-WSP|RCPT-WSNOC|RCPT-WSP)$'

ALL_BRIDGES=(br1 br2 br3)
EXCLUDED_BRIDGES=(br1)

for vm in $(virsh list --all --name | sed '/^$/d'); do
  state="$(virsh domstate "$vm" | tr -d '\r')"
  echo "Processing $vm (state: $state)"

  if [[ "$vm" =~ $EXCLUDE_REGEX ]]; then
    echo "  (VM is excluded from br2/br3; will attach br1 only)"
    BRIDGES=("${EXCLUDED_BRIDGES[@]}")
  else
    BRIDGES=("${ALL_BRIDGES[@]}")
  fi

  for br in "${BRIDGES[@]}"; do
    if virsh domiflist "$vm" 2>/dev/null | awk '{print $3}' | grep -qx "$br"; then
      echo "  - $br already present on $vm (skipping)"
      continue
    fi

    if [[ "$state" == "running" ]]; then
      echo "  + Attaching bridge $br to $vm (live + config)"
      virsh attach-interface "$vm" --type bridge --source "$br" --model virtio --live --config
    else
      echo "  + Attaching bridge $br to $vm (config only)"
      virsh attach-interface "$vm" --type bridge --source "$br" --model virtio --config
    fi
  done
done

echo "Done."
