#!/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=Device discovery
### set the default device to interact with

## usage: fx set-device DEVICE[:SSH_PORT]
##
## fx set-device is used to specify the default device to target for
## fx commands that communicate with a Fuchsia device.
## A device is set within the scope of a build directory (i.e. out/arm64 may
## have a different default device than out/x64).
##
## If no device name is given, set-device will attempt to discover devices. If
## one device is found, that device is set as the default for the current build
## directory. If more than one device is found, the user must select one and
## provide it to a subsequent invocation of the command.
##
## If specified, DEVICE may be a Fuchsia device name that will be resolved
## using ffx or an IP address. An IPv4 address must be specified
## directly, while IPv6 need to be surrounded by brackets.
##
## SSH_PORT, if specified, will be used for all commands that rely on SSH to
## connect to the device, instead of the default SSH port (22).
##
## Examples:
##   fx set-device strut-wind-ahead-turf
##   fx set-device strut-wind-ahead-turf:222
##   fx set-device 192.168.1.2
##   fx set-device 192.168.3.1:8022
##   fx set-device [fe80::7:8%eth0]
##   fx set-device [fe80::7:8%eth0]:5222
##   fx set-device
##
## To unset, use `fx unset-device`.

set -e

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

function select_device() {
  IFS=$'\n' read -rd '' -a devices <<<"$1"
  select choice in "${devices[@]}"; do
    echo "${devices[$((REPLY-1))]}"
    break
  done
}

# FX_REMOTE_INVOCATION is set by serve-remote to supress the warning
# for that use case.
if is-remote-workflow-device && [[ -z "${FX_REMOTE_INVOCATION}" ]]; then
  fx-warn "Local configuration indicates a remote-workflow setup"
  fx-warn "  'fx set-device' does not work correctly at this end of a remote setup"
  fx-warn "Execute set-device on the local machine in order to change targets in the remote flow"
fi

device="$1"
if [[ -z "$device" ]]; then
  devices="$(fx-target-finder-info | cut -d ' ' -f 2)"
  if [[ -z "${devices}" ]]; then
    fx-error "No devices discovered, please supply a device name"
    exit 1
  fi
  if [[ "$(echo "$devices" | wc -l)" -ge 2 ]]; then
    fx-error "Multiple devices found, please pick one from the list:"
    device=$(select_device "$devices")
  else
    device="${devices}"
  fi
elif ! is-valid-device "${device}"; then
  fx-error "Invalid device: ${device}"
  fx-command-help
  exit 1
fi

if [[ ! -d "${FUCHSIA_BUILD_DIR}" ]]; then
  fx-error "Build directory ${FUCHSIA_BUILD_DIR} does not exist, run \"fx set\" first."
  exit 1
fi

echo "New default device: ${device}"
echo "$device" > "${FUCHSIA_BUILD_DIR}.device"
