#!/bin/bash

set -e
#set -x

# Script param (sent as env var):
# ID_BUS (example: scsi, ata)
# DEVPATH (example: /devices/pci0000:80/0000:80:08.2/0000:81:00.0/ata8/host7/target7:0:0/7:0:0:0/block/sdc)
#
# In fact, we see the variables as per:
# udevadm test -a -p  $(udevadm info -q path -n /dev/sdc)

if [ $(id -u) -ne 0 ]; then
	echo "$0 needs root: please use sudo."
	exit 1
fi

# Source Auxilium (args parser)
. /usr/share/auxilium/auxilium.sh
#. ../../auxilium/share/auxilium.sh
#readonly choice=$((ls /dev/sd* 2>/dev/null|| echo ' ') | tr '\n' '|')
auxilium_init $(basename $0) -m "Provides a device name based on its physical location"
auxilium_add fo_name -s f -t opt -m 'Generate a ferreus-orbit name (like Box0-Disk0)'
auxilium_add devname -t positional -m 'Resolve by device name (/dev/sdX, by default it get DEVPATH by env var)'

if [ -f "/usr/share/ferreus-orbit/common.sh" ]; then
	. "/usr/share/ferreus-orbit/common.sh"
elif [ -f "share/common.sh" ] ; then
	. "share/common.sh"
elif [ -e "../share/common.sh" ] ; then
	. "../share/common.sh"
else
	echo "Cannot load common.sh: exiting."
	exit 1
fi

auxilium_parse "$@"

fo_lock

if [ -n "${AUXILIUM_ARG_fo_name}" ]; then
	USE_FO_NAME=1
	[ -d "/dev/disk/fo-sort" ] || mkdir -p "/dev/disk/fo-sort" || true
fi

[ -z "$AUXILIUM_ARG_devname" ] || eval $(udevadm info -q property --export ${AUXILIUM_ARG_devname})


logger -t "udev" "===> DEVPATH=${DEVPATH}"

readonly fo_name=$(fo_get_sorted_name)
# Store MAJ:MIN To DEVNAME in $VAR_PATH/maj_min_map
sed -i "^${MAJOR}:${MINOR},/d" "${VAR_PATH}maj_min_map" 2>/dev/null || true
echo "${MAJOR}:${MINOR},${fo_name}" >> "${VAR_PATH}maj_min_map"

echo $fo_name
