#!/bin/sh

set -e
set -x

SCRIPTS=/usr/share/ubuntu/scripts
LOGFILE=/var/log/installer/ubuntu-recovery-command.log
COMMAND=
STAGE=
PARAMS=

die()
{
    [ -n "$@" ] && echo $@
    exit 0
}

find_boot_device()
{
    local _dev=$(grep -E 'cdrom|isodevice' /proc/mounts | awk '/^\/dev/{print $1}')
    [ -n "$_dev" ] && echo $_dev || echo ''
    return 0
}

find_recovery_stage()
{
    local _dev=$(find_boot_device | sed 's/\/dev\///')
    if [ -z "$_dev" ] || \
       [ ! -f /sys/class/block/$_dev/partition ] || \
       [ $(cat /sys/class/block/$_dev/partition) -eq 1 ]
    then
        echo 'ubuntu-bootstrap-stage'
    else
        echo 'ubiquity-stage'
    fi
    return 0
}

case $1 in
   ubiquity)   COMMAND=ubiquity.d
               PARAM=$(echo --arg=$(find_recovery_stage)) ;;
   oem-config) COMMAND=oem-config.d ;;
   partman)    COMMAND=partman.d ;;
   *) die 'error command: $1' ;;
esac

case $2 in
   early|late) STAGE=$2 ;;
   success|failure) [ "$1" = "ubiquity" ] && STAGE=$2 ;;
   *) die 'error argument: $2' ;;
esac

#prepare arguments
for _p in $(echo $@ | cut -d' ' -f3-); do
    PARAMS=$(echo $PARAMS --arg=$_p)
done

[ ! -d /var/log/installer ] && mkdir -p /var/log/installer

exec >> "$LOGFILE" 2>&1

if [ -d "$SCRIPTS/$COMMAND/$STAGE" ]; then
   echo "+++ Run hook scripts in $SCRIPTS/$COMMAND/$STAGE:"
   run-parts -v --report $SCRIPTS/$COMMAND/$STAGE $PARAMS || true
else
   echo "+++ Missing path or directory: $SCRIPTS/$COMMAND/$STAGE"
fi
exit 0
