#! /usr/bin/env bash

command=$1
args=$(printf '"`"%s`"",' "${@:2}") ; args=${args%,}
winrun_pid=$$
pidfile="/tmp/winrun-pid-$(date +%s)"

if [[ $args != '' ]]; then
  argumentlist="-ArgumentList $args"
fi

powershell_command="
\$process = Start-Process -NoNewWindow -PassThru \"$command\" $argumentlist
if (\$process) {
  echo \$process.id
  Wait-Process \$process.id
  exit \$process.ExitCode
} else {
  # startup failure
  echo -1
}"

powershell.exe -Command "$powershell_command" > $pidfile &
linux_pid=$!

# Use tail to wait for the file to be populated
while read -r line; do
  windows_pid=$(echo $line | tr -d '\r\n')
  break # we only need the first line
done < <(tail -f $pidfile)
rm $pidfile

if [[ $windows_pid == -1 ]]; then
  exit 127
fi

term() {
  taskkill.exe -f -pid $windows_pid > /dev/null
}

trap term SIGTERM
trap term SIGINT

while ps -p $linux_pid > /dev/null; do
  wait $linux_pid
done
sleep 0.5s
exit $?
