#!/bin/bash
# copies a bhuman distribution to a robot

usage()
{
  echo "usage: copyfiles [Operate|Release|Develop|Debug] [<ipaddress>|(-m n <ipaddress>)*] {options}"
  echo "  options:"
  echo "    -l <location> set location"
  echo "    -t <color>    set team color to blue or red"
  echo "    -p <number>   set player number"
  echo "    -d            delete target directory first"
  echo "    -r            restart bhumand and if -d is active, naoqid, too"
  echo "    -m n <ip>     copy to <ip>, and set playernumber to n (one -m per robot)"
  echo "    -wc           compile also under Windows"
  echo "    -nc           never compile"
  echo "  examples:"
  echo "    ./copyfiles Develop 134.102.204.229 -p 1"
  echo "    ./copyfiles Release -d -m 1 10.0.0.1 -m 3 10.0.0.2"
  exit 1
}

copy()
{
  REMOTE=$1
  PLAYER=$2

  echo "------ Deploying $COMPONENT ($CONFIG) on $REMOTE ------"
  if [ -z $DELETE ]; then
    echo "Updating..."
  else
    echo "Sending all..."
    ssh -i ../../Config/Keys/id_rsa_nao -o StrictHostKeyChecking=no root@$REMOTE "rm -rf /media/userdata/Config"
  fi
  rsync --del --exclude=*.stx --exclude=*.log --exclude=.* --exclude=*.tc --exclude=.svn --exclude=/Images --exclude=/Logs --exclude=/Scenes --exclude=/Keys --chmod=u+rw,go+r,Dugo+x -rchve "ssh -i ../../Config/Keys/id_rsa_nao -o StrictHostKeyChecking=no" ../../Config/. ../../Build/$COMPONENT/Linux/$CONFIG/bhuman ../../Build/libbhuman/Linux/Release/libbhuman.so ../../Build/b-scriptBehavior/libb-scriptBehavior.so root@$REMOTE:/media/userdata/Config
  # create new directory (if it does not exist yet) for logging on robot
  ssh -i ../../Config/Keys/id_rsa_nao -o StrictHostKeyChecking=no root@$REMOTE "mkdir -p /media/userdata/Config/Logs"
  [ $? -ne 0 ] && exit 1

  # set settings on robot
  if [ ! -z $LOCATION ] || [ ! -z $TEAM ] || [ ! -z $PLAYER ]; then
    SEDFLAGS=""
  [ ! -z $LOCATION ] && SEDFLAGS="$SEDFLAGS -e 's/location.*/location = $LOCATION;/'"
  [ ! -z $TEAM ] && SEDFLAGS="$SEDFLAGS -e 's/teamColor.*/teamColor = $TEAM;/'"
  [ ! -z $PLAYER ] && SEDFLAGS="$SEDFLAGS -e 's/playerNumber.*/playerNumber = $PLAYER;/'"
    ssh -i ../../Config/Keys/id_rsa_nao -o StrictHostKeyChecking=no root@$REMOTE "sed $SEDFLAGS < /media/userdata/Config/settings.cfg > /media/userdata/Config/settingsTEMP.cfg && mv /media/userdata/Config/settingsTEMP.cfg /media/userdata/Config/settings.cfg"
  [ $? -ne 0 ] && exit 1
  fi
  true
}

scriptPath=$(echo $0 | sed "s|^\.\./|`pwd`/../|" | sed "s|^\./|`pwd`/|")
basePath=$(dirname ${scriptPath})
currPath=$(pwd)
cd "${basePath}"

# init variables
[ -z $CONFIG ] && CONFIG="Develop"
SOLUTION="BHuman.sln"
COMPONENT="Nao"
PLAYER=
DELETE=
TEAM=
LOCATION=
REMOTE=
COMPILE=1
NUMMULTIPLE=0
WINDOWSCOMPILE=
RESTART=
MULTIPLEDATA=

# parse options
[ "x" = "x$*" ] && usage
while true; do
  case $1 in
    "")
      break
      ;;
    "-p" | "/p")
      shift
      PLAYER=$1
      ;;
    "-l" | "/l")
      shift
      LOCATION=$1
      ;;
    "-t" | "/t")
      shift
      TEAM=$1
      ;;
    "-d" | "/d")
      DELETE=1
      ;;
    "-wc" | "/wc")
      WINDOWSCOMPILE=1
      ;;
    "-nc" | "/nc")
      COMPILE=
      ;;
    "-r" | "/r")
      RESTART=1
      ;;
    "-h" | "/h" | "/?")
      usage
      ;;
    "-m" | "/m")
      shift
      MULTIPLEDATA[$NUMMULTIPLE]=$1
      shift
      MULTIPLEDATA[$NUMMULTIPLE + 1]=$1
      echo "Found -m, num=$NUMMULTIPLE with [$NUMMULTIPLE]=${MULTIPLEDATA[$NUMMULTIPLE]}, [$NUMMULTIPLE+1]=${MULTIPLEDATA[$NUMMULTIPLE + 1]}"
      let "NUMMULTIPLE+=2"
      ;;
    "Nao")
      COMPONENT="Nao"
      ;;
    "Operate")
      CONFIG="Operate"
      ;;
    "Release")
      CONFIG="Release"
      ;;
    "Develop")
      CONFIG="Develop"
      ;;
    "Debug")
      CONFIG="Debug"
      ;;
    -*)
      echo "unknown parameter: $1"
      usage
      ;;
    *)
      REMOTE=$1
      ;;
  esac
  shift
done

if [ ! -z $COMPILE ]; then
  if [ -z "${ComSpec}${COMSPEC}" ]; then
    # on linux
    make $COMPONENT CONFIG=$CONFIG
    [ $? -ne 0 ] && exit 1
  else
    if [ ! -z $WINDOWSCOMPILE ]; then
      echo "------ Compiling $COMPONENT ($CONFIG) ------"
      DEVENV="$(cygpath -u "$(cygpath -m -s "${VS90COMNTOOLS}")../IDE/devenv.com")"
      CMD="${DEVENV} ${SOLUTION} /Build ${CONFIG} /Project _${COMPONENT}"
      $CMD
      [ $? -ne 0 ] && exit 1
      echo "------ Successfully compiled ------"
    fi
  fi
fi


if [ ! -z $REMOTE ]; then
  copy $REMOTE $PLAYER
  if [ ! -z $RESTART ]; then
    if [ ! -z $DELETE ]; then
      ssh -i ../../Config/Keys/id_rsa_nao -o StrictHostKeyChecking=no root@$REMOTE "./bhumand stop && sleep 2 && ./naoqid restart && sleep 2 && echo starting bhuman && ./bhumand start >/dev/null 2>/dev/null &"
    else
      ssh -i ../../Config/Keys/id_rsa_nao -o StrictHostKeyChecking=no root@$REMOTE "echo restarting bhuman && ./bhumand restart >/dev/null 2>/dev/null &"
    fi
  fi
else # try to deploy to multiple targets
  if [ "$NUMMULTIPLE" -ne 0 ]; then
    for ((i=0; i < NUMMULTIPLE; i+=2))
    do
      copy ${MULTIPLEDATA[i+1]} ${MULTIPLEDATA[i]}
    done
  fi
fi

cd "${currPath}"
