#!/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.

#### CATEGORY=Run, inspect and debug
### 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:
##   > Ommitting `--release` from `fx set`
##       (Observatory isn't available in --release builds).
##
##   > "bundles/tools" to be available on the system (for the `find` command).
##
## Arguments:
##   -h|--help    Print out this message.

VERBOSE=false
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../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="${FUCHSIA_DIR}/prebuilt/third_party/dart/linux-x64/bin/dart"
        ;;
    Darwin)
        PREBUILT_DART="${FUCHSIA_DIR}/prebuilt/third_party/dart/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="${FUCHSIA_DIR}/tools/devshell/contrib/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)"
