#!/bin/bash

VERBOSE=0
CONFIG_DIR=$HOME/.config/crolim
MEMORY_FILE=${CONFIG_DIR}/memory
STATUS_COMMAND="date +%D"

function usage() {
	echo "Usage: $0 [OPTIONS] COMMAND"
	echo "       $0 -h"
	echo ""
	echo "  -h ... show help"
	echo ""
	echo " OPTIONS"
	echo "  -m --memory-file    ... location to store previous status value"
	echo "  -s --status-command ... command to execute to get the current status"
    echo "  -v --verbose        ... verbose mode"
	echo " COMMAND ... command to limit until memory and status are the same"
}

# read the options
TEMP=`getopt -o m:s:hv --long memory-file:,status-command:,help,verbose -- "$@"`
eval set -- "$TEMP"

while true ; do
	case "$1" in
		-h | --help) usage; exit 0
			;;
        -v | --verbose) VERBOSE=1 ; shift
            ;;
        -m | --memory-file)
            MEMORY_FILE=$2 ; shift 2
            ;;
        -s | --status-command)
            STATUS_COMMAND=$2 ; shift 2
            ;;
        --) shift ; break ;;
        *) echo "Internal error!" ; exit 1 ;;
    esac
done

# check limiting condition
#mkdir -p `dirname $MEMORY_FILE`
STATUS_NOW=`eval $STATUS_COMMAND`
STATUS_MEMORY=""
if [[ -f $MEMORY_FILE ]]; then
    STATUS_MEMORY=`cat $MEMORY_FILE`
fi
if [[ "$STATUS_NOW" == "$STATUS_MEMORY" ]]; then
    [[ $VERBOSE == 1 ]] && echo "Limiting, status is the same: ${STATUS_NOW}"
    exit 0
else
    [[ $VERBOSE == 1 ]] && echo "Status changed from '${STATUS_MEMORY}' to '${STATUS_NOW}'"
    echo ${STATUS_NOW} > $MEMORY_FILE || { echo "Cannot update memory file: $MEMORY_FILE" ; exit 1 ; }
fi

# run the command!
eval $@