#!/bin/bash

. /usr/share/groovix/global.conf

#define defaults before overriden by command line

SERVER_NUMBER=0


GNC_VERSION=$GX_VERSION

SERVER_PORT=22


FILES=()

######################################################################################
#parse command line arguments
until [ -z "$1" ]
do
  CURARG=$1
  case "$CURARG" in
    "--sfup="* )        SERVER_FILESYSTEM_UPDATE_PATH=${CURARG#*=} ;;
    "--sfup"   ) shift; SERVER_FILESYSTEM_UPDATE_PATH=$1 ;;
    "--user="* )        SERVER_USER=${CURARG#*=} ;;
    "--user"   ) shift; SERVER_USER=$1 ;;
    "--server="* )        SERVER_HOST=${CURARG#*=} ;;
    "--server"   ) shift; SERVER_HOST=$1 ;;
    "--port="* )        SERVER_PORT=${CURARG#*=} ;;
    "--port"   ) shift; SERVER_PORT=$1 ;;
    "--version="* )        GNC_VERSION=${CURARG#*=} ;;
    "--version"   ) shift; GNC_VERSION=$1 ;;
    "--type="* )        GNC_TYPE=${CURARG#*=} ;;
    "--type"   ) shift; GNC_TYPE=$1 ;;
    "--name="* )        GNC_NAME=${CURARG#*=} ;;
    "--name"   ) shift; GNC_NAME=$1 ;;
    "--server-number="* )        SERVER_NUMBER=${CURARG#*=} ;;
    "--server-number"   ) shift; SERVER_NUMBER=$1 ;;
    "--edit")        MYEDIT=1  ;;
    *) 		FILES+=($CURARG)
  esac
  shift
done

#handle undefined variables
if [ -z "$MYBACKGROUND" ] ; then MYBACKGROUND="" ; fi
#for booleans, undefined or "" is the only boolean false, test using: if [ $MYFLAG ]




if [ ${#FILES[*]} -eq 0 ] ; then
	echo "usage: $0 [--server-number=1] [--server=hostname] [--sfup=server-filesystem-update-path] [--user=server-username] [--port=server-port] [--type=gnc-group-name] [--version=customer-name] [--name=gnc-name] [--edit]  file(s)-or-directory(s)-to-include"
	exit 1
fi
######################################################################################

#work out variables from what we know

if [ -z "$SERVER_HOST" ] ; then
	SERVER_BIN=${GNC_SERVER_URLS[$SERVER_NUMBER]}
	echo SERVER BIN IS $SERVER_BIN
	SERVER_BIN_FULL_PATH=`dirname $SERVER_BIN`
	SERVER_BIN_FULL_PATH_NO_HTTP=`echo $SERVER_BIN_FULL_PATH | perl -pi -e 's/^http[s\/:]+//'`
	SERVER_HOST=$( echo $SERVER_BIN_FULL_PATH_NO_HTTP | cut -f 1 -d/ )
fi
if [ -z "$SERVER_FILESYSTEM_UPDATE_PATH" ] ; then
	SERVER_FILESYSTEM_UPDATE_PATH=${GNC_SERVER_FILESYSTEM_UPDATE_PATHS[$SERVER_NUMBER]}
fi


echo SERVER HOST IS $SERVER_HOST
echo SERVER FILESYSTEM UPDATE PATH IS $SERVER_FILESYSTEM_UPDATE_PATH

if [ -z "$GNC_NAME" ] ; then 
	echo -n "GNC name: "
	read GNC_NAME
fi

if [ -z "$GNC_TYPE" ] ; then
	echo -n "GNC type: "
	read GNC_TYPE
fi


if [ -z "$SERVER_USER" ] ; then
	echo -n "server username: "
	read SERVER_USER
fi


TPATH=/tmp/gnc-uploads/
mkdir -p $TPATH

TDIR=/tmp/gnc-uploads/$GNC_NAME
TGNC=$TPATH/$GNC_NAME/gnc

rm -rf $TDIR

gnc-new.client --noedit $TPATH/$GNC_NAME

echo "${FILES[@]}" | egrep 'printers.conf|cups/ppd'
if [ $? -eq 0 ] ; then
	CUPS=true
	echo '

set +e
/etc/init.d/cups stop
rm -f /var/cache/cups/*.ipp
set -e


' >> $TGNC
	
fi

for FILE in "${FILES[@]}"
do
  echo processing "${FILE}"
 if [ -e /$FILE ] ; then
	echo $FILE probably includes the full path
 else
	echo $FILE is not full-pathed, appending cwd
	FILE=`pwd`/$FILE	
	echo FILE IS NOW SET TO $FILE
 fi

 FILE_PATH=$( dirname $FILE )
 FILE_NAME=$( basename $FILE )

 FPERM=$( perl -e'printf "%o\n",(stat shift)[2] & 07777' $FILE )

 if [ -d $FILE ] ; then
    echo $FILE is a dir, tarring it up!
    mkdir -p $TPATH/$GNC_NAME/$FILE_PATH
    cd $FILE_PATH
    echo cwd is `pwd`
    echo tar cvzf $TPATH/$GNC_NAME/$FILE_PATH/$FILE_NAME.tgz $FILE_NAME
         tar cvzf $TPATH/$GNC_NAME/$FILE_PATH/$FILE_NAME.tgz $FILE_NAME
    echo "gncget --tgz $FILE_PATH/$FILE_NAME" >> $TGNC
 else
    echo $FILE is a normal file
    mkdir -p $TPATH/$GNC_NAME/$FILE_PATH
    cp $FILE $TPATH/$GNC_NAME/$FILE_PATH/
    #set to 644 for storage on server
    chmod 644 $TPATH/$GNC_NAME/$FILE_PATH/$FILE_NAME
    echo "gncget --mod=$FPERM $FILE_PATH/$FILE_NAME" >> $TGNC
 fi
done

if [ -n "$CUPS" ] ; then
echo '

/etc/init.d/cups start


' >> $TGNC
fi

if [ -n "$MYEDIT" ] ; then
	editor $TDIR/gnc
fi


#TODO: deal with possibility that this gnc name might exist!
#        - append unique string?
#        - do ls first - would require password entered twice (or grabbing it and sending it twice, tricky)
#            - ssh -p 2222  ltd@s2.groovix.net 'ls u2021.groovix.net/updates/demo/default/update-name'


#echo scp -P $SERVER_PORT -rp $TDIR  ${SERVER_USER}@$SERVER_HOST:$SERVER_FILESYSTEM_UPDATE_PATH/$GNC_VERSION/$GNC_TYPE/$GNC_NAME
     #scp -P $SERVER_PORT -rp $TDIR  ${SERVER_USER}@$SERVER_HOST:$SERVER_FILESYSTEM_UPDATE_PATH/$GNC_VERSION/$GNC_TYPE/$GNC_NAME

#use rsync so we overwrite any existing gnc in place - scp will create sub directory inside of it!
echo rsync --rsh=\"ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p$SERVER_PORT\" -av --progress $TDIR/  ${SERVER_USER}@$SERVER_HOST:$SERVER_FILESYSTEM_UPDATE_PATH/$GNC_VERSION/$GNC_TYPE/$GNC_NAME/
     rsync   --rsh="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p$SERVER_PORT" -av --progress $TDIR/  ${SERVER_USER}@$SERVER_HOST:$SERVER_FILESYSTEM_UPDATE_PATH/$GNC_VERSION/$GNC_TYPE/$GNC_NAME/


