#!/bin/bash
# Copyright 2019 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
### run fuchsia devtools

## usage: fx fdt [VERSION]
##   VERSION   Download (if necessary) and run a specific version of
##             Fuchsia devtools. If not specified, the current version
##             in //prebuilt will be used.
##             VERSION is either a CIPD hash or "latest".

if [[ $# == 0 ]]; then
  # Use prebuilt version.
  system_monitor="$FUCHSIA_DIR/prebuilt/gui_tools/system_monitor/linux/system_monitor"
  if [[ ! -x "$system_monitor" ]]; then
    cat << end
To use fdt, JIRI should download it. Please run the following commands:
 jiri init -fetch-optional=fuchsia_devtools && jiri fetch-packages --local-manifest=true
end
    exit 1;
  fi
  # Maybe add ` > /dev/null 2>&1 &` in the future.
  exec "$system_monitor"
fi

# If a specific version of FDT is requested, it can be downloaded directly.
# Check that the fuchsia_devtools are downloaded and then run it.
# If the version is already downloaded, it will not be re-downloaded.

# Using "latest" or a CIPD hash.
version="$1"
shift

# The "XXXXXX" will be replaced with a unique value.
temp_file=$(mktemp /tmp/fuchsia_devtools_cipd_XXXXXX.ensure)

cat << end > "$temp_file"
\$ServiceURL https://chrome-infra-packages.appspot.com/

fuchsia_internal/gui_tools/fuchsia_devtools/\${platform} $version
end

if [[ -z "$FUCHSIA_DIR" ]]; then
  echo "Please define a FUCHSIA_DIR."
  exit 1
fi

dev_tools="$FUCHSIA_DIR/prebuilt/gui_tools/test_fuchsia_devtools"
cipd ensure -ensure-file "$temp_file" -root "$dev_tools"
if ! `cipd ensure -ensure-file "$temp_file" -root "$dev_tools"`; then
  rm "$temp_file"
  echo "Failed to download $version."
  exit 1
fi
rm "$temp_file"

"$dev_tools/system_monitor/linux/system_monitor" $@
# In the future, we should add the following to eliminate the terminal spam:
#   > /dev/null 2>&1 &
# For the near term, using this for debug output is important.
