#!/bin/sh

OPT=$(getopt -n "$0" -o er -l i-really-mean-it,erase-backups -- "$@")
if [ $? != 0 ]; then
  echo "getopt failed"
  exit 1
fi
eval set -- "$OPT"

. /etc/utils.sh

ireallymeanit=0
erasebackups=0
while true; do
  case "$1" in
    -r|--i-really-mean-it ) ireallymeanit=1 ;;
    -e|--erase-backups ) erasebackups=1 ;;
    -- ) shift; break ;;
    * ) echo "***Illegal option: $1" >&2; exit 1 ;;
  esac
  shift
done

if [ $ireallymeanit -eq 0 ]; then
  echo
  echo "                       *    *    *"
  echo "THIS PROGRAM WILL WIPE ALL DATA PARTITIONS ON HARD DISK!"
  echo "                       *    *    *"
  echo
  echo -n "Are you sure (y/n)? "
  read yesno
  [ "$yesno" = "y" ] || exit 1
  echo
  ireallymeanit=1
fi

# partition is kernel or rootfs
is_os_part()
{
  ans=$(sgdisk -p $1 2>/dev/null |
  while read number start end size unit code name; do
    if [ "$number" = "$2" ]; then
      case $name in
        kernel*)
          echo yes
          ;;
        rootfs*)
          echo yes
          ;;
      esac
    fi
  done)
  [ a"$ans" = ayes ]
}

sata_dev=$(find_sata_blkdev)
if [ ! -b$sata_dev ] ; then
  echo not sata device: $sata_dev
  exit 1
fi

# /config is partition 20
config_dev=${sata_dev}20
if is_os_part $sata_dev 20 ; then
  echo cannot format software partition: $config_dev
  exit 1
fi

for f in /etc/init.d/S[89]* ; do
  $f stop
done

# force kill chroot binaries, just in case.
pkill -9 -f buffet_monitor
pkill -9 -f buffet
pkill -9 -f cryptohomed
pkill -9 -f chapsd
pkill -9 -f tcsd

# force kill SpaceCast binaries, just in case.
for f in /app/spacecast/* ; do
  pkill -9 -f ${f#/app/spacecast/}
done

# assert TPM physical presence
chroot /chroot/chromeos /bin/tpmc ppon
# clear TPM ownership
chroot /chroot/chromeos /bin/tpmc clear
# enable TPM
chroot /chroot/chromeos /bin/tpmc enable
# activate TPM
chroot /chroot/chromeos /bin/tpmc activate

# try to unmount up to 20 times
for i in $(seq 20) ; do
  umount -f /dev/mapper/config
  mount | grep -q "/dev/mapper/config on" || break
done

dmsetup remove config
# TODO(erdi): modify cryptdev to find the correct device to remove.
losetup -d /dev/loop0

# try to unmount up to 20 times
for i in $(seq 20) ; do
  umount -f $config_dev
  mount | grep -q $config_dev || break
done

# format config partition
if ! mkfs.ext4 -q $config_dev ; then
  # if we fail at this point, just try to delete everything
  rm -rf /config/* /var/config/*
fi

# clear /var/media other than /var/media/data
mv /var/media/data /var/media/.data
rm -rf /var/media/*
mv /var/media/.data /var/media/data
