#!/bin/bash

function submenu_add
{
    FILE=$1
    NAME=$2
    ICON=$3
cat > $FILE <<EOF
[Desktop Entry]
Value=1.0
Encoding=UTF-8
Type=Directory
Name=$NAME
Icon=$ICON
EOF
}

function menu_add
{
    FILE=$1
    NAME=$2
    EXEC=$3
    ICON=$4
    cat > $FILE <<EOF
[Desktop Entry]
Value=1.0
Encoding=UTF-8
Type=Application
Exec=$EXEC
Name=$NAME
Icon=$ICON
EOF
    return $?
}

CDROOT=$(dirname $0)
IPREFIX=/opt/zio

function usage
{
    echo
    echo "Usage: install.sh <package> [install-prefix] [cd-root]"
    echo
    echo "package        - one of java-api, python-api, cpanel, doc"
    echo "install-prefix - install path. Default: $IPREFIX"
    echo "cd-root        - the CD mount point. Default: $CDROOT"
}

INSTALL_JAVA=0
INSTALL_DOC=0
INSTALL_PYTHON=0
INSTALL_CPANEL=0

if [ -z $1 ]; then
    echo "install.sh: incorrect no. of arguments"
    echo "install.sh: check ZIO motherboard manual for install procedure"
    usage
    exit 1
elif [ $1 = java-api ]; then
    INSTALL_JAVA=1
elif [ $1 = doc ]; then
    INSTALL_DOC=1
elif [ $1 = python-api ]; then
    INSTALL_PYTHON=1
elif [ $1 = cpanel ]; then
    INSTALL_PYTHON=1
    INSTALL_CPANEL=1
else
    echo "install.sh: unrecognized package \"$1\""
    echo "install.sh: check ZIO motherboard manual for install procedure"
    usage
    exit 1
fi

if [ $2 ]; then
    IPREFIX=$2
fi

if [ $3 ]; then
    if [ -d $3 ]; then
	CDROOT=$3
    else
	echo "install.sh: third argument should be the CD-ROM mount point"
	echo "install.sh: non-directory file specified"
	usage
	exit 1
    fi
fi

LOG=/tmp/zio-install.log-$$

CPMENU=$IPREFIX/bin/zio-cpanel-menu
ENV=$IPREFIX/bin/zio-env
UNINST=$IPREFIX/bin/zio-uninstall
UNINST2=$IPREFIX/bin/zio-uninstall2

D=$IPREFIX/desktop/

failed=0

mkdir -p $IPREFIX
if [ $? -ne 0 ]; then
    echo "install.sh: unable to create install directory"
    echo "install.sh: you might have to run install.sh as root or using sudo"
    exit 1
fi

echo -n "Installing ZIO Uninstall Script ... "

(echo "Installing Uninstall Script ... "
    rm -f $UNINST &&
    rm -f $UNINST2 &&
    mkdir -p $IPREFIX/bin &&

    echo "#!/bin/bash" >> $UNINST &&
    echo "cp $UNINST2 /tmp" >> $UNINST &&
    echo "exec /tmp/zio-uninstall2" >> $UNINST &&

    echo "#!/bin/bash" >> $UNINST2 &&
    echo "unlink \$0" >> $UNINST2 &&
    echo "xdg-desktop-menu uninstall $IPREFIX/desktop/zilogic-zio.directory $IPREFIX/desktop/*.desktop" >> $UNINST2 &&
    echo "xdg-icon-resource uninstall --size 16 zio-logo" >> $UNINST2 &&
    echo "xdg-icon-resource uninstall --size 24 zio-logo" >> $UNINST2 &&
    echo "xdg-icon-resource uninstall --size 32 zio-logo" >> $UNINST2 &&
    echo "xdg-icon-resource uninstall --size 48 zio-logo" >> $UNINST2 &&
    echo "xdg-icon-resource uninstall --size 64 zio-logo" >> $UNINST2 &&
    echo "xdg-icon-resource uninstall --size 128 zio-logo" >> $UNINST2 &&
    echo "rm -fr $IPREFIX" >> $UNINST2 &&
    
    chmod +x $UNINST &&
    chmod +x $UNINST2 &&
    echo "Done") >> $LOG 2>&1

if [ $? -ne 0 ]; then
    echo "Failed"
    failed=1
else
    echo "Done"
fi

if [ $INSTALL_PYTHON -eq 1 ]; then

    echo -n "Installing Python API ... "

    (echo "Installing Python API ... "
	cp $CDROOT/software/zio-python-api-1.1.tar.gz /tmp/ &&
	pushd /tmp/ &&
	tar --gunzip -x -f zio-python-api-1.1.tar.gz &&
	pushd zio-python-api-1.1 &&
	python setup.py install --prefix $IPREFIX &&
	popd &&
	rm -fr zio-python-api-1.1 &&
	rm -f zio-python-api-1.1.tar.gz &&
	popd &&
	echo "Done") >> $LOG 2>&1
    
    if [ $? -ne 0 ]; then
	echo "Failed"
	pyapi=0
	failed=1
    else
	echo "Done"
	pyapi=1
    fi
fi

if [ $INSTALL_JAVA -eq 1 ]; then

    echo -n "Installing Java API ... "

    (echo "Installing Java API ... "
	mkdir -p $IPREFIX/java &&
	cp $CDROOT/software/zio-java-api-1.1.jar $IPREFIX/java &&
	chmod -R u+w $IPREFIX/java &&
	echo "Done") >> $LOG 2>&1
    
    if [ $? -ne 0 ]; then
	echo "Failed"
	failed=1
    else
	echo "Done"
    fi

fi

echo -n "Installing ZIO Environment Script ... "

CWD_REGEX='\.$\|\.:'

ZIO_PY=$(find $IPREFIX -name zio.py)
if [ $ZIO_PY ]; then
    IPYTHONPATH=$(dirname $ZIO_PY)
fi

(echo "Installing ZIO Environment Script ... "
    rm -f $ENV &&

    echo "#!/bin/bash" >> $ENV &&
    echo "export CLASSPATH=$IPREFIX/java/zio-java-api-1.1.jar:\$CLASSPATH" >> $ENV &&
    echo "export CLASSPATH=/usr/share/java/RXTXcomm.jar:\$CLASSPATH" >> $ENV &&
    echo "echo \$CLASSPATH | grep -e '$CWD_REGEX' > /dev/null ||" >> $ENV &&
    echo "export CLASSPATH=.:\$CLASSPATH" >> $ENV &&
    (test $IPYTHONPATH && 
	echo "export PYTHONPATH=$IPYTHONPATH:\$PYTHONPATH" >> $ENV) &&
    echo "export PATH=$IPREFIX/bin:\$PATH" >> $ENV &&
    chmod +x $ENV
    echo "Done") >> $LOG 2>&1

if [ $? -ne 0 ]; then
    echo "Failed"
    failed=1
else
    echo "Done"
fi

if [ $INSTALL_CPANEL -eq 1 ]; then

    if [ $pyapi -eq 1 ]; then
	echo -n "Installing Control Panel ... "

	(echo "Installing Control Panel ... "
	    source $ENV &&
	    cp $CDROOT/software/zio-cpanel-1.1.tar.gz /tmp/ &&
	    pushd /tmp/ &&
	    tar --gunzip -x -f zio-cpanel-1.1.tar.gz &&
	    pushd zio-cpanel-1.1 &&
	    python setup.py install --prefix $IPREFIX &&
	    popd &&
	    rm -fr zio-cpanel-1.1 &&
	    rm -f zio-cpanel-1.1.tar.gz &&
	    popd &&
	    
	    rm -f $CPMENU &&
	    echo "#!/bin/bash" >> $CPMENU &&
	    echo "source $ENV" >> $CPMENU &&
	    echo "exec zio-cpanel" >> $CPMENU &&
	    chmod +x $CPMENU &&

	    mkdir -p $IPREFIX/desktop &&
	    submenu_add $D/zilogic-zio.directory "ZIO" zio-logo &&
	    menu_add $D/zilogic-zio-cpanel.desktop "ZIO Control Panel" $CPMENU \
		zio-logo &&

	    xdg-desktop-menu install $IPREFIX/desktop/zilogic-zio.directory \
		$IPREFIX/desktop/*.desktop &&

	    echo "Done") >> $LOG 2>&1
	
	if [ $? -ne 0 ]; then
	    echo "Failed"
	    failed=1
	else
	    echo "Done"
	fi
    else
	echo "Installing Control Panel ... Skipped (Requires Python API)"
    fi

fi
  
if [ $INSTALL_DOC -eq 1 ]; then

    echo -n "Installing Documentation ... "
    
    (echo "Installing Documentation ..."
	mkdir -p $IPREFIX/doc &&
	cp -dpR $CDROOT/docs/* $IPREFIX/doc &&
	chmod -R u+w $IPREFIX/doc &&
	echo "Done") >> $LOG 2>&1
    
    if [ $? -ne 0 ]; then
	echo "Failed"
	failed=1
    else
	echo "Done"
    fi

fi

echo -n "Installing Icons ... "
(echo "Installing Icons ..."
    mkdir -p $IPREFIX/logo &&
    cp -dpR $CDROOT/logo/* $IPREFIX/logo &&
    chmod -R u+w $IPREFIX/logo &&
    xdg-icon-resource install --size 16 \
	$IPREFIX/logo/zilogic-zio-logo-16.png zio-logo &&
    xdg-icon-resource install --size 24 \
	$IPREFIX/logo/zilogic-zio-logo-24.png zio-logo &&
    xdg-icon-resource install --size 32 \
	$IPREFIX/logo/zilogic-zio-logo-32.png zio-logo &&
    xdg-icon-resource install --size 48 \
	$IPREFIX/logo/zilogic-zio-logo-48.png zio-logo &&
    xdg-icon-resource install --size 64 \
	$IPREFIX/logo/zilogic-zio-logo-64.png zio-logo &&
    xdg-icon-resource install --size 128 \
	$IPREFIX/logo/zilogic-zio-logo-128.png zio-logo &&
    echo "Done") >> $LOG 2>&1

if [ $? -ne 0 ]; then
   echo "Failed"
   failed=1
else
   echo "Done"
fi

if [ $INSTALL_DOC -eq 1 ]; then

    echo -n "Installing Menu Items ... "
    (echo "Installing Menu Items ..."
	mkdir -p $IPREFIX/desktop &&
	submenu_add $D/zilogic-zio.directory "ZIO" zio-logo &&
	menu_add $D/zilogic-zio-japi.desktop "ZIO Java API" \
	    "xdg-open $IPREFIX/doc/zio-java-api-1.1/index.html" \
	    text-html &&
	menu_add $D/zilogic-zio-jtut.desktop "ZIO Java Tutorial" \
	    "xdg-open $IPREFIX/doc/zio-java-tutorial-1.0.pdf" \
	    x-office-document &&
	menu_add $D/zilogic-zio-pyapi.desktop "ZIO Python API" \
	    "xdg-open $IPREFIX/doc/zio-python-api-1.1/index.html" \
	    text-html &&
	menu_add $D/zilogic-zio-pytut.desktop "ZIO Python Tutorial" \
	    "xdg-open $IPREFIX/doc/zio-python-tutorial-1.1.pdf" \
	    x-office-document &&
	menu_add $D/zilogic-zio-manual.desktop "ZIO Motherboard Manual" \
	    "xdg-open $IPREFIX/doc/zio-mb-user-manual-1.1.pdf" \
	    x-office-document &&
	
	xdg-desktop-menu install $IPREFIX/desktop/zilogic-zio.directory \
	    $IPREFIX/desktop/*.desktop &&
	echo "Done") >> $LOG 2>&1
    
    if [ $? -ne 0 ]; then
	echo "Failed"
	failed=1
    else
	echo "Done"
    fi

fi

if [ $failed -eq 1 ]; then
    echo "Installation of one or more components failed"
    echo "Press ENTER to view the log file using less"
    read
    less $LOG
fi

rm -f $LOG

