#!/bin/bash
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

### forward local ports to Dart VMs on the device.

## usage: fx dart-tunnel  [-h|--help] [-v|--verbose] [<isolate>]
##
## Creates an SSH tunnel with the device's running Dart VM(s) and leaves it open
## until the user chooses to close it. Supplying an Isolate name will attempt to
## connect to all isolates whose name match.
##
## The verbose flag is strongly discouraged unless you are debugging.
##
## This command requires Topaz in order to run.
##
## Arguments:
##   -h|--help    Print out this message.

DEVSHELL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
VERBOSE=false
source "${DEVSHELL_DIR}"/lib/vars.sh || exit $?
fx-config-read

case $1 in
  -h|--help)
  fx-command-help
  exit 0
  ;;
  -v|--verbose)
  shift # name
  VERBOSE=true
  ;;
esac

case "$(uname -s)" in
    Linux)
        PREBUILT_DART="${DEVSHELL_DIR}/../../topaz/tools/prebuilt-dart-sdk/linux-x64/bin/dart"
        ;;
    Darwin)
        PREBUILT_DART="${DEVSHELL_DIR}/../../topaz/tools/prebuilt-dart-sdk/mac-x64/bin/dart"
        ;;
esac
IP_ADDR_LINK_LOCAL="$(get-fuchsia-device-addr)"

# Strips the back of the string the longest match of '%' followed by
# any characters (the first two '%' characters are just the bash syntax).
IP_ADDR="${IP_ADDR_LINK_LOCAL%%%*}"
# Splits from the front of the string the longest match of any character
# followed by '%'.
IP_IFACE="${IP_ADDR_LINK_LOCAL##*%}"
SSH_CONFIG="${FUCHSIA_BUILD_DIR}/ssh-keys/ssh_config"
# Just compress the rest of the args to an array here.
ARGS="$(echo "$@")"
DART_TUNNEL_LIB_DIR="${DEVSHELL_DIR}/dart-tunnel-lib"
DART_TUNNEL_PACKAGES="${DART_TUNNEL_LIB_DIR}/dart-tunnel.packages"
DART_BIN="${DART_TUNNEL_LIB_DIR}/dart-tunnel.dart"

# Conditionally prints the --verbose flag.
function _verbose_flag() {
  if [ "${VERBOSE}" = true ]; then
    echo "--verbose"
  fi
}

"${PREBUILT_DART}" --packages="${DART_TUNNEL_PACKAGES}" \
  "${DART_BIN}" \
  --ssh-config="${SSH_CONFIG}" \
  --ip-address="${IP_ADDR}" \
  --network-interface="${IP_IFACE}" \
  --isolate="$ARGS" \
  "$(_verbose_flag)"
