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

set -eu

get_confirmation() {
  echo -n "Press 'y' to confirm: "
  read CONFIRM
  if [[ "$CONFIRM" != "y" ]]; then
    echo "[format_sdcard] Aborted due to invalid confirmation"
    exit 1
  fi
}

if [[ $OSTYPE != "linux-gnu" ]]; then
  echo "[format_sdcard] Script is currently Linux-exclusive"
  exit 1
fi

SCRIPT_DIR=$( cd $( dirname "${BASH_SOURCE[0]}" ) && pwd)
ZIRCON_DIR="$SCRIPT_DIR/.."

echo $ZIRCON_DIR


# Ensure Zircon has been built prior to formatting USB
pushd "$ZIRCON_DIR" > /dev/null
./scripts/build-zircon-arm64
popd > /dev/null

lsblk
echo "Enter the name of a block device to format: "
echo "     This will probably be of the form 'sd[letter]', like 'sdc'"
echo -n ">  "
read DEVICE

# Ensure that device exists
echo -n "[format_sdcard] Checking that device exists: $DEVICE ..."
DEVICE_PATH="/dev/$DEVICE"
if [[ ! -e "$DEVICE_PATH" ]]; then
  echo " FAILED"
  echo "[format_sdcard] ERROR: This device does not exist: $DEVICE_PATH"
  exit 1
fi
echo " SUCCESS"

# Ensure that the device is a real block device
echo -n "[format_sdcard] Checking that device is a known block device..."
if [[ ! -e "/sys/block/$DEVICE" ]]; then
  echo " FAILED"
  echo "[format_sdcard] ERROR: /sys/block/$DEVICE does not exist."
  echo "            Does $DEVICE refer to a partition?"
  exit 1
fi
echo " SUCCESS"

# Try to check that the device is a USB stick
echo -n "[format_sdcard] Checking if device is USB: $DEVICE ..."
READLINK_USB=$(readlink -f "/sys/class/block/$DEVICE/device" | { grep -i "usb" || true; })
if [[ -z "$READLINK_USB" ]]; then
  echo " FAILED"
  echo "[format_sdcard] ERROR: Cannot confirm that device is a USB stick"
  echo "[format_sdcard] ERROR: Please insert USB stick and retry"
  exit 1
fi
echo " SUCCESS"

# Ensure the device is not mounted
echo -n "[format_sdcard] Checking that device is not mounted: $DEVICE ..."
if [[ -n $(df -Hl | grep "$DEVICE") ]]; then
  echo " FAILED"
  echo "[format_sdcard] ERROR: Your device appears to be mounted: "
  echo "..."
  df -Hl | grep "$DEVICE"
  echo "..."
  echo "[format_sdcard] ERROR: Please unmount your device and retry"
  exit 1
fi
echo " SUCCESS"

# Confirm that the user knows what they are doing
sudo -v -p "[sudo] Enter password to confirm information about device: "
sudo sfdisk -l "$DEVICE_PATH"
echo "[format_sdcard] ABOUT TO COMPLETELY WIPE / FORMAT: $DEVICE_PATH"
get_confirmation
echo "[format_sdcard] ARE YOU 100% SURE? This will hurt if you get it wrong."
get_confirmation

# Create three new partitions on the device, 1GB for root and divide the
# remaining space into 2 pieces for data and bootfs

# Determine how many bytes we have available on this disk.
BLK_DEV_SIZE=`sudo blockdev --getsize64 $DEVICE_PATH`
BLK_DEV_SIZE_MB=$((BLK_DEV_SIZE/1048576))

if [ "$BLK_DEV_SIZE_MB" -lt 3000 ]; then
    echo " FAILED"
    echo "[format_sdcard] ERROR: SD Card must be at least 4GB"
    exit 1
fi


sudo dd if=/dev/zero of="$DEVICE_PATH" bs=512 count=1




DATA_PTN_START=4259840
DATA_PTN_END=4521983
DATA_PTN_SIZE=$((DATA_PTN_END-DATA_PTN_START+1))
DATA_PTN_SIZE_B=$(((DATA_PTN_END - DATA_PTN_START + 1)*512))

echo "Using Data Partition Size = ${DATA_PTN_SIZE_B} bytes"

sudo sfdisk -uS "$DEVICE_PATH" << EOF
${DATA_PTN_START} ${DATA_PTN_SIZE} 0x0b -

EOF

DATA_PTN_PATH="${DEVICE_PATH}1"

sudo mkfs.fat ${DEVICE_PATH}1



# Function to attempt unmounting a mount point up to three times, sleeping
# a couple of seconds between attempts.
function umount_retry() {
  set +e
  TRIES=0
  while (! sudo umount $1); do
    ((TRIES++))
    if [[ ${TRIES} > 2 ]]; then
      echo "[format_sdcard] Unable to umount $0"
      exit 1
    fi
    sleep 2
  done
  set -e
}

# Copy the necessary files to the root partition
MOUNT_PATH=`mktemp -d`
sudo mount "$DATA_PTN_PATH" "$MOUNT_PATH"
trap "umount_retry \"${MOUNT_PATH}\" && rm -rf \"${MOUNT_PATH}\" && echo \"Unmounted succesfully\"" INT TERM EXIT

curl -L http://dn.odroid.com/S905/BootLoader/ODROID-C2/c2_boot_release_fuchsia.tar.gz >/tmp/sd.tgz
tar -C /tmp -xzf /tmp/sd.tgz

# Copy the kernel to the boot partition.
sudo cp "$ZIRCON_DIR/build-arm64/odroidc2-zircon.bin" \
        "${MOUNT_PATH}/"

# Copy the ramdisk
sudo cp "$ZIRCON_DIR/build-arm64/odroidc2-bootdata.bin" \
        "${MOUNT_PATH}/"

# Copy Linux device tree for ODROID-C2
FDT_PATH="${MOUNT_PATH}/dtbs/current/amlogic"
sudo mkdir -p "$FDT_PATH"
sudo cp "/tmp/sd_fuse_fuchsia/meson64_odroidc2.dtb" \
        "${FDT_PATH}/meson-gxbb-odroidc2.dtb"

# Create a boot script (boot.scr)
sudo mkimage -A arm64 -T script -C none \
        -d "$ZIRCON_DIR/kernel/target/arm64/board/odroidc2/boot.cmd" \
        "${MOUNT_PATH}/boot.scr"

# Make sure all writes are committed to disk.
pushd "$MOUNT_PATH" > /dev/null
sync
popd > /dev/null

cd /tmp/sd_fuse_fuchsia
sudo sh sd_fusing.sh $DEVICE_PATH
rm -rf /tmp/sd_fuse_fuchsia
rm -f /tmp/sd.tgz



echo " SUCCESS"
