#!/bin/bash

# pkg_od: Old packages discover

vercomp () {
    if [[ $1 == $2 ]]
    then
        return 0
    fi
    local IFS=.
    local i ver1=($1) ver2=($2)
    # fill empty fields in ver1 with zeros
    for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
    do
        ver1[i]=0
    done
    for ((i=0; i<${#ver1[@]}; i++))
    do
        if [[ -z ${ver2[i]} ]]
        then
            # fill empty fields in ver2 with zeros
            ver2[i]=0
        fi
        if ((10#${ver1[i]} > 10#${ver2[i]}))
        then
            return 1 # ARG1 is greather than ARG2
        fi
        if ((10#${ver1[i]} < 10#${ver2[i]}))
        then
            return 2 # ARG1 is less than ARG2
        fi
    done
    return 0 # ARG1 is equal to ARG2
}

#TODO
#[ -r /etc/pkgmk.conf ] && . /etc/pkgmk.conf
#[ -z "$PKGMK_COMPRESSION_MODE" ] && PKGMK_COMPRESSION_MODE="xz"

VERBOSE=0

while [ $1 ]; do
	case $1 in
		-v|--verbose) VERBOSE=1 ;;
		*) DIR=$1 ;;
	esac
	shift
done

[ -z "$DIR" ] && DIR="./"

PACKAGES="$(find $DIR -type f -name '*.pkg.tar.*' -exec basename {} \; | cut -d'#' -f1 | sort -u)"
UNRESOLVED_PACKAGES=""

for PKG in ${PACKAGES[@]}; do
	available_versions="$(find $DIR -type f -name "${PKG}#*.pkg.tar.*" -exec basename {} \; | cut -d'#' -f2 | sed 's|.pkg.tar.*||')"
	newest="0"
	olders=""
	for av in ${available_versions[@]}; do
		if [ "$newest" != "0" ]; then 
			# compare versions but discard the release part 
			vercomp ${newest/-*} ${av/-*} 2>/dev/null
			case $? in
				2)	# mandar el anterior newest a la lista olders	       
					olders="$olders $newest"
			       		# actualizar newest
					newest="$av"
					;;
				1)	# mandar av a la lista de olders
					olders="$olders $av"
				       	;;
				0)	# compare release numbers and decide
					vercomp ${newest/*-} ${av/*-} 2>/dev/null
					case $? in
						2) olders="$olders $newest"; newest="$av";;
						1) olders="$olders $av";;
						0) UNRESOLVED_PACKAGES="$UNRESOLVED_PACKAGES ${PKG}";;
					esac
					;;
			esac
		else
			# si no habia ningun valor previo asigna el primer av
			newest="$av"
		fi
	done
	if [ -n "$olders" ]; then
		for ov in ${olders[@]}; do
			find $DIR -type f -name "${PKG}#${ov}.pkg.tar.*" -exec basename {} \;
		done
	fi
done

if [ $VERBOSE -eq 1 ]; then
	if [ -n "$UNRESOLVED_PACKAGES" ]; then
		echo "-- unresolved packages --"
		UNRESOLVED_PACKAGES="$(echo $UNRESOLVED_PACKAGES | tr ' ' '\n' | sort -u)"
		for PKG in ${UNRESOLVED_PACKAGES[@]}; do
			find $DIR -type f -name "${PKG}#*.pkg.tar.*" -exec basename {} \;
		done
	fi
fi

# End of file
