#!/bin/bash 

# customize here the appropriate backup location
DBROOT=.
BACKUPROOT=$DBROOT/backup
ARCHDIR=$DBROOT/arch
TAPEDIR=$DBROOT/tape

TABLESET="NA"
PIT=""
OS=`uname`


nextBUID() {

    local TABLESET=$1
    local BRANCH=$2

    cd ${BACKUPROOT}
    
    LOW=0
    for LASTID in `ls ${TABLESET}-${BRANCH}-bu*.tar.gz | sed "s/${TABLESET}-${BRANCH}-bu//" | sed 's/.tar.gz//'`
    do
	if ((  $LASTID > $LOW ))
	then
	    LOW=$LASTID
	fi
    done
    BUID=$(( LOW + 1 ))
    echo $BUID 
}


while getopts "t:a:b:r:p:l" opt; do 
    case $opt in

	t)	    
	    TABLESET=${OPTARG}
	    ;;	    
	p)
	    PIT=${OPTARG}
	    ;;
	b)
	    BRANCH=${OPTARG}
	    ;;

	a)
	    # echo "Option backup was triggered with $OPTARG" >&2 

	    # BUDATE=`date +%Y%m%d-%H%M`

	    BUID=$(nextBUID $TABLESET $BRANCH)
	    

	    echo "Starting backup for buid $BUID ..."
	    tar -cvPf ${BACKUPROOT}/${TABLESET}-${BRANCH}-bu${BUID}.tar ${OPTARG} 2>&1 

	    rm -rf ${BACKUPROOT}/${TABLESET}-${BRANCH}-bu${BUID}.tar.gz
	    gzip ${BACKUPROOT}/${TABLESET}-${BRANCH}-bu${BUID}.tar  2>&1

	    if [ $? == 0 ]
	    then
		echo "Backup finished successful."
	    else
		echo "Backup failed."
		exit 1
	    fi
	    ;; 
	l) 
	    
	    # echo "Option List was triggered!" >&2 
	    for f in `ls -t ${BACKUPROOT}/${TABLESET}-${BRANCH}-bu*.tar.gz 2> /dev/null`
	    do
		
                # linux

                if [ "$OS" == "FreeBSD" ] \
                       || [ "$OS" == "Darwin" ]
                then
                    # osx / freebsd
                    BUTS=`stat -f%SB -t "%Y-%m-%d %H:%M:%S" $f`
                elif [ "$OS" == "Linux" ]
                then
                    # linux 
                    BUTS=`stat -c %y $f | sed 's/\(.*\)\..*/\1/'`
                else
                    echo "Unknown OS"
                    exit 1
                fi

		# echo "BUTS=" $BUTS

		# since there may be already restored logfile in arch dir, we just analyze tapedir
		# as an approach
		NUMLOG=`find $TAPEDIR -type f -newermt "$BUTS" | wc -l`
		# echo "NumLog=" $NUMLOG
	     		
		# BUTS=`stat --printf="%w" $f | sed 's/\..*//'`
		# echo Compare $BUTS and $PIT
		if [[ $BUTS < "$PIT" ]] || [ "$PIT" = "" ]
		then
		    BUID="bu"`basename $f | sed "s/\($TABLESET\-$BRANCH\-bu\)\([0-9][0-9]*\)\(\.tar\.gz\)/\2/"`

		    if ls $ARCHDIR/$TABLESET\-$BRANCH* 1> /dev/null 2>&1
		    then
			LASTLOG=`ls -t $ARCHDIR/$TABLESET\-$BRANCH* | head -1`
		    else
			LASTLOG=`ls -t $TAPEDIR/$TABLESET\-$BRANCH* | head -1`
		    fi
			
		    if [ "$OS" == "FreeBSD" ] \
			   || [ "$OS" == "Darwin" ]
                    then
			# osx / freebsd
			LASTLOGTS=`stat -f%SB -t "%Y-%m-%d %H:%M:%S" $LASTLOG`
                    elif [ "$OS" == "Linux" ]
                    then
			# linux 
			LASTLOGTS=`stat -c %y $LASTLOG | sed 's/\(.*\)\..*/\1/'`
                    else
			echo "Unknown OS"
			exit 1
                    fi
		    
		    if [ ! "$LASTLOGTS" ]
		    then
			LASTLOGTS=None
		    fi
		   
		    
		    echo ${BUID},${BUTS},${NUMLOG},${LASTLOGTS}
		fi
	    done 
	    ;; 
	r)
	    echo "Starting restore .."
	    tar -xvPf ${BACKUPROOT}/${TABLESET}-${BRANCH}-${OPTARG}.tar.gz 2>&1
	    if [ $? == 0 ]
	    then
		echo "Restore finished successful"
	    else
		echo "Restore failed"
		exit 1
	    fi
	    ;; 
	\?) 
	    echo "Invalid option: -$OPTARG" >&2 
	    ;; 
	:) 
	    echo "Option -$OPTARG requires an argument." >&2 
	    exit 1 
	    ;; 
    esac 
done
