#!/usr/bin/env bash

# Copyright 2015 Olivier van Helden <olivier@van-helden.net>
# Released under GNU Affero GPL v3.0 license
#    http://www.gnu.org/licenses/agpl-3.0.html

OS=$(uname -a | cut -d " " -f 1 | sed "s/[^a-zA-Z0-9]//g")
PGM=$(basename "$0")

if [ "$1" = "-n" ]; then
	OS=now
	shift
fi

for file in "$@"; do
	if [ ! -f "$file" ]; then
		file=$(echo "$file" | sed "s/\/$//")
		if [ ! -d "$file" ]; then
			echo "$PGM: could not find $file" >&2
			continue
		else
			file=$(echo "$file" | sed "s/\/$//")
			echo "$PGM: stamping directory" >&2
		fi
	fi
	if [ ! -d "$file" ]; then
		filename=$(echo $file | sed "s/\.[^.]*$//" | sed "s/-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]$//")
		extension=$(echo $file | grep "\." | sed "s/.*\(\.[^.]*$\)/\1/")
	else
		filename="$file"
		extension=""
	fi
	case $OS in
	"Darwin" | "FreeBSD")
		modtime=$(stat -s "$file" 2>/dev/null | sed "s/.*st_mtime=\([0-9]*\) .*/\1/")
		if [ $modtime ]; then
			STAMP=$(date -r $modtime +"%Y%m%d-%H%M%S")
		else
			STAMP=$(date +"%Y%m%d-%H%M%S" 2>/dev/null)
		fi
		;;

	"Linux")
		STAMP=$(date +"%Y%m%d-%H%M%S" -r "$file" 2>/dev/null)
		;;

	# "FreeBSD")
	# echo "os: $OS"
	# ;;

	"now")
		STAMP=$(date +"%Y%m%d-%H%M%S" 2>/dev/null)
		;;
	*)
		STAMP=$(date +"%Y%m%d-%H%M%S" -r "$file" 2>/dev/null)
		;;
	esac
	if [ "$STAMP" = "" ]; then
		echo "stamp empty"
		continue
	fi

	if [ -f "$filename-$STAMP$extension" ]; then
		echo "$filename-$STAMP$extension already exists"
		continue
	fi

	mv "$file" "$filename-$STAMP$extension" &&
		echo "$filename-$STAMP$extension" ||
		echo "$PGM: could not move $file to $filename-$STAMP$extension"

done
