#!/usr/bin/env bash
version="1.00 (c) 2022 th@bogus.net"
# command line control over parallels vm's

neverSuspend="4913939a-ee26-48b2-af95-deadbeefcafe" # may be blank, but usually your gw vm


while getopts "hsrdu" option
do
	case $option in
		h) # help
			echo "$0 [-h|-s|-r|-u|-d]"
			echo $version
			echo "Command line control of Parallels vm's"
			echo "	-h this"
			echo "	-s suspend running vms"
			echo "	-r resume previously running vms"
			echo "	-u start ALL registered vms"
			echo "	-d suspend ALL registered vms" 
			exit;;
		s) # suspend
			cat /dev/null > $HOME/.suspendedvms
			runningMachines=`prlctl list -a | grep running | sed -nr 's/^{([0-9a-f\-]+)}.*/\1/p' | grep -v $neverSuspend`
			for vm in $runningMachines
			do 
				echo Suspending $vm
				prlctl suspend $vm
				echo $vm >> $HOME/.suspendedvms
			done
			exit;;
		r) # resume
			suspendedMachines=`cat $HOME/.suspendedvms | egrep '[0-9a-f\-]+'`
			for vm in $suspendedMachines
			do
				echo Starting $vm
				prlctl start $vm
			done
			exit;;
		u) # start all registered vms
			allMachines=`prlctl list -a | grep -v running | sed -nr 's/^{([0-9a-f\-]+)}.*/\1/p'`
			for vm in $allMachines
			do
				echo Starting $vm
				prlctl start $vm
			done
			exit;;
		d) # suspend all registered vms
			allMachines=`prlctl list -a | grep -v suspended | sed -nr 's/^{([0-9a-f\-]+)}.*/\1/p'`
			for vm in $allMachines
			do
				echo Suspending $vm
				prlctl suspend $vm
			done
			exit;;
		\?) # invalid input
			echo "Error: Invalid option, -h for help."
			exit;;
	esac
done
