#!/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}/package_config.json"
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}" \
  --enable-experiment=non-nullable \
  --no-sound-null-safety \
  "${DART_BIN}" \
  --ssh-config="${SSH_CONFIG}" \
  --ip-address="${IP_ADDR}" \
  --network-interface="${IP_IFACE}" \
  --isolate="$ARGS" \
  "$(_verbose_flag)"
