#!/bin/dash
# jamesbond 2015
# MIT License
# simple script to generate correct slack-desc

### configuration
MAXLINES=11
MAXWIDTH=70
WORKFILE=$(mktemp -p /tmp slackdesc.XXXXXXXX)
USE_RULES=

# cleanup before existing
trap 'rm -f $WORKFILE; exit' 0 HUP INT TERM

# $*-msg
die() {
	echo "$*" 1>&2
	exit 1
}

# $1-progname $2-version $3-shortdesc $4-longdesc $5-homepage
compose() {
	echo $1 $2 $3 > $WORKFILE
	[ $(wc -m < $WORKFILE) -gt $MAXWIDTH ] && die "--> Summary is too long."
	
	echo >> $WORKFILE
	echo $4 | fold -s -w $MAXWIDTH >> $WORKFILE
	
	# pad an extra line for homepage, if possible
	[ $(wc -l < $WORKFILE) -lt $((MAXLINES - 1)) ] && printf "\n" >> $WORKFILE
	
	[ "$5" ] && echo $5 | fold -s -w $MAXWIDTH >> $WORKFILE
	[ $(wc -l < $WORKFILE) -gt $MAXLINES ] && die "--> Description is too long."

	yes "" | head -n $MAXLINES | paste -d " " - $WORKFILE > ${WORKFILE}.2
	mv ${WORKFILE}.2 ${WORKFILE}
	
	[ $USE_RULER ] && 
	echo "$1|-----handy-ruler------------------------------------------------------|"
	yes $1 | head -n $MAXLINES | paste -d: - $WORKFILE
	rm -f $WORKFILE
}

usage() {
	cat << EOF
Usage: ${0##/} [-i] [-r] progname version short-desc long-desc home-page
     -i runs interactive mode
     -r display handy ruler
Without any option it will also enter interactive mode.
EOF
	exit
}

interactive() {
	echo "Type program name (no spaces in between):"
	read progname
	echo "Type version number (no spaces in between):"
	read version
	echo "Type short description (not nore than a line, surround with parentheses):"
	read shortdesc
	echo "Type long description (not more than 9 lines):"
	read longdesc
	echo "Type homepage (not more a line):"
	read homepage
	compose "$progname" "$version" "$shortdesc" "$longdesc" "$homepage"
}

### main
while [ "$1" ]; do
	case "$1" in
	    "") break ;;
		-h|--help) usage ;;
		-r) USE_RULER=1  ;;
		-*) ;; # ignore
		*)  compose "$@"
		    exit ;;
	esac
	shift
done
interactive
