if [[ "" == $SANDBOX_ROOT ]]; then
  export SANDBOX_ROOT=$HOME/Sandbox
fi

sandbox() {
  local usage="usage: sandbox {create,destroy,enable,disable} [name]"

  if [[ "" == $1 ]]; then
    echo $usage
    return 1
  fi

  case $1 in
    create)
      if [[ "" == $2 ]]; then
        echo $usage
        return 1
      fi

      local sandbox=$SANDBOX_ROOT/$2
      if [[ -d $sandbox ]]; then
        echo "Sandbox '$2' already exists"
        return 2
      fi

      mkdir -p $sandbox &> /dev/null
      begin=$PWD
      cd $sandbox

      echo "SANDBOX_HOME=\$(dirname -- "\$0:a")" >> .enter
      echo "SANDBOX_NAME=$2" >> .enter

      echo "unset SANDBOX_NAME" >> .exit
      echo "unset SANDBOX_HOME" >> .exit

      git init &> /dev/null

      cd $begin
      cd $sandbox
      ;;
    rename)
      if [[ "" == $2 || "" == $3 ]]; then
        echo $usage
        return 1
      fi

      mv $SANDBOX_ROOT/$2 $SANDBOX_ROOT/$3
      sed -i "" "s/$2/$3/g" $SANDBOX_ROOT/$3/.env
      ;;
    destroy)
      if [[ "" == $2 ]]; then
        echo $usage
        return 1
      fi

      local sandbox=$SANDBOX_ROOT/$2
      if [[ ! -d $sandbox ]]; then
        echo "Sandbox '$2' does not exist"
        return 2
      fi

      cd -
      if [[ "${SANDBOX_ROOT##$PWD}" = "${SANDBOX_ROOT}" ]]; then
        cd $HOME
      fi

      rm -rf $sandbox
      ;;
    list)
      /bin/ls -1 $SANDBOX_ROOT | less -F -K -R -X
      ;;
    enable)
      if [[ "" == $2 ]]; then
        echo $usage
        return 1
      fi

      local sandbox=$SANDBOX_ROOT/$2
      if [[ ! -d $sandbox ]]; then
        echo "Sandbox '$2' does not exist"
        return 2
      fi

      export SANDBOX_RETURN=$PWD
      cd $sandbox
      ;;
    disable)
      if [[ -z $SANDBOX_RETURN ]]; then
        echo "Sandbox is not currently active"
        return 2
      fi

      cd $SANDBOX_RETURN
      unset $SANDBOX_RETURN
      ;;
  esac
}