#!/bin/bash
# Copyright 2017 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=Software delivery
### make a zedboot USB key

## usage: fx mkzedboot [-f] [--build|--no-build] <usb device>
##
##   --build | --no-build     build (or not) the image required to run mkzedboot.
##   -f                       force writing to a non-usb target.
##
## The default for --build is defined by the "incremental" feature:
##    'fx --enable=incremental mkzedboot'  defaults to '--build'
##    'fx --disable=incremental mkzedboot'  defaults to '--no-build'

set -e

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

fx-config-read

force=false
build=false
if is_feature_enabled "incremental"; then
  # In incremental workflows, these defaults have changed.
  # Keep old behavior if incremental is not enabled.
  build=true
fi
while (( $# )); do
  case "$1" in
    --help)
      fx-command-help
      exit 0
      ;;
    --no-build)
      build=false
      ;;
    --build)
      build=true
      ;;
    -f)
      force=true
      ;;
    *)
      break
      ;;
  esac
  shift
done

if [[ $# -gt 1 ]]; then
  fx-error "Invalid syntax"
  fx-command-help
  exit 1
fi
if [[ $# -eq 0 ]]; then
    fx-error "Device argument required!"
    fx-command-help
    echo
    echo "USB disks:"
    fx-command-run list-usb-disks
    exit 1
fi

USB_DEVICE="$1"

image=""
type=""

# Try to get image for efi, if not found, try to get vboot image for chromebook
image="$(fx-command-run list-build-artifacts --allow-empty --type blk mkzedboot)"
type="efi"
if [[ -z "${image}" ]]; then
   image="$(fx-command-run list-build-artifacts --allow-empty --type zbi.signed mkzedboot)"
   type="vboot"
fi

if [[ -z "${image}" ]]; then
  fx-error "Cannot find image to run mkzedboot. Re-check build board and product."
  exit 1
fi

if ! $build && [[ ! -f "${FUCHSIA_BUILD_DIR}/${image}" ]]; then
  fx-warn "Cannot find image to run mkzedboot: $image, will attempt to build it."
  build=true
fi

if $build; then
  fx-command-run build "${image}"
fi

fx-mkzedboot "${USB_DEVICE}" "${type}" "${FUCHSIA_BUILD_DIR}/${image}" $force
