#!/bin/sh

INSTALLERNAME="deb"
COMPANYNAME="ids"
PRODUCTNAME="ueye"
REPORTFILE="/tmp/${COMPANYNAME}_${PRODUCTNAME}_${INSTALLERNAME}_`date +"%Y%m%d_%H%M%S"`_$$.log"
DRIVERUSBDCONF="/etc/${COMPANYNAME}/${PRODUCTNAME}/${PRODUCTNAME}usbd.conf"
DRIVERETHDCONF="/etc/${COMPANYNAME}/${PRODUCTNAME}/${PRODUCTNAME}ethd.conf"
DRIVERAPIMACHINECONF="/etc/${COMPANYNAME}/${PRODUCTNAME}/${PRODUCTNAME}apimachine.conf"
DRIVERFIRMWAREDIR="/lib/firmware/${COMPANYNAME}/${PRODUCTNAME}"



usage()
{
    echo "Usage: $0 -v usb|eth|machine [-o <outfile>]" 1>&2
    exit 1
}

VARIANT=""
OUTFILE=""
while getopts ":v:o:" o; do
    case "${o}" in
        v)
            VARIANT=$OPTARG
            if [ "${VARIANT}" = "usb" ]; then
                echo -n
            elif [ "${VARIANT}" = "eth" ]; then
                echo -n
            elif [ "${VARIANT}" = "machine" ]; then
                echo -n
            else
                usage
            fi
            ;;
        o)
            OUTFILE=$OPTARG
            ;;
        *)
            usage
            ;;
    esac
done
shift $((OPTIND-1))

if [ -z "${VARIANT}" ]; then
    usage
fi

if [ "$(id -u)" != "0" ]; then
    echo "This must be run as root." 1>&2
    exit 1
fi



create_usb()
{
    echo ">>> create ${PRODUCTNAME}usbd config" >> $REPORTFILE 2>&1

    touch $OUTFILE >> $REPORTFILE 2>&1
    echo -n > $OUTFILE
    echo "; ${PRODUCTNAME}usbd configuration file" >> $OUTFILE
    echo "; autogenerated by ${INSTALLERNAME} installer on $(date)" >> $OUTFILE
    echo "" >> $OUTFILE
    echo "[Parameters]" >> $OUTFILE
    echo "Usb3FirmwarePath = ${DRIVERFIRMWAREDIR}/usb3/" >> $OUTFILE
    echo "Usb3AddonFirmwarePath = ${DRIVERFIRMWAREDIR}/usb3_addon/" >> $OUTFILE
    echo "DeviceSequentialArrangement = 300" >> $OUTFILE
    echo "" >> $OUTFILE
}



create_eth()
{
    echo ">>> create ${PRODUCTNAME}ethd config" >> $REPORTFILE 2>&1

    all_interfaces=`ls -C /sys/class/net | sort`
    interfaces=""
    for INTERFACE in $all_interfaces; do
        current_interface=$INTERFACE

        # loopback devices
        current_interface=`echo ${current_interface} | sed 's/^lo$//g'`

        # docker devices
        current_interface=`echo ${current_interface} | sed 's/^docker[0-9]*//g'`

        # libvirt devices
        current_interface=`echo ${current_interface} | sed 's/^vir.*//g'`

        # serial line ip (slip)
        current_interface=`echo ${current_interface} | sed 's/^sl.*//g'`

        # wwan
        current_interface=`echo ${current_interface} | sed 's/^ww.*//g'`

        interfaces="${interfaces} ${current_interface}"
    done
    interfaces="`echo ${interfaces} | sed 's/[[:space:]][[:space:]]*/ /g'`"
    interfaces="`echo ${interfaces} | sed 's/^[[:space:]]*//g'`"
    interfaces="`echo ${interfaces} | sed 's/[[:space:]]*$//g'`"

    touch $OUTFILE >> $REPORTFILE 2>&1
    echo -n > $OUTFILE
    echo "; ${PRODUCTNAME}ethd configuration file" >> $OUTFILE
    echo "; autogenerated by ${INSTALLERNAME} installer on $(date)" >> $OUTFILE
    echo "" >> $OUTFILE
    echo "[Parameters]" >> $OUTFILE
    echo "EthFirmwarePath = ${DRIVERFIRMWAREDIR}/eth/" >> $OUTFILE
    echo "Interfaces = ${interfaces}" >> $OUTFILE
    echo "" >> $OUTFILE
}



create_machine()
{
    echo ">>> create lib${PRODUCTNAME}_api machine config" >> $REPORTFILE 2>&1

    touch $OUTFILE >> $REPORTFILE 2>&1
    echo -n > $OUTFILE
    echo "; lib${PRODUCTNAME}_api (machine) configuration file" >> $OUTFILE
    echo "; autogenerated by ${INSTALLERNAME} installer on $(date)" >> $OUTFILE
    echo "" >> $OUTFILE
    echo "[Parameters]" >> $OUTFILE
    echo "" >> $OUTFILE
}


if [ "${VARIANT}" = "usb" ] && [ -z "${OUTFILE}" ]; then
    OUTFILE=$DRIVERUSBDCONF
elif [ "${VARIANT}" = "eth" ] && [ -z "${OUTFILE}" ]; then
    OUTFILE=$DRIVERETHDCONF
elif [ "${VARIANT}" = "user" ] && [ -z "${OUTFILE}" ]; then
    OUTFILE=$DRIVERAPIUSERCONF
elif [ "${VARIANT}" = "machine" ] && [ -z "${OUTFILE}" ]; then
    OUTFILE=$DRIVERAPIMACHINECONF
fi

mkdir -p `dirname "${OUTFILE}"` >> $REPORTFILE 2>&1

if [ -e "$OUTFILE" ]; then
    mv "${OUTFILE}" "${OUTFILE}_backup_`date +"%Y%m%d%H%M%S"`"
fi

if [ "${VARIANT}" = "usb" ]; then
    create_usb
elif [ "${VARIANT}" = "eth" ]; then
    create_eth
elif [ "${VARIANT}" = "machine" ]; then
    create_machine
fi
