#!/bin/bash

VERBOSE=0

if [ "$1" = "-v" ] ; then
    VERBOSE=1
    shift
fi

cd $1

if [ "$2"x != ""x ] ; then
    EXT="$2"
fi

if [ "$CHECKSUMS"x = ""x ] ; then
    CHECKSUMS="sha512 sha256"
fi

for SUM in $CHECKSUMS; do
    UPSUM=$(echo $SUM | tr 'a-z' 'A-Z')
    FILE=$UPSUM"SUMS"$EXT
    if [ $VERBOSE -eq 1 ] ; then
        echo "Clearing $PWD/$FILE"
    fi
    :> $FILE
done

# Ordering is important, so we do separate "find" calls here - we
# *really* want to get the jigdo files before the iso files, so we can
# use the checksums there first instead of re-calculating them
FILES=""
FILES="$FILES "$(find * -name '*.jigdo')
FILES="$FILES "$(find * -name '*.template')
FILES="$FILES "$(find * -name '*.iso')
FILES="$FILES "$(find * -name '*.torrent')

for file in $FILES; do
    iso=""
    case $file in
        *.jigdo)
            iso=${file%%.jigdo}.iso
            JIGDO=1
            ;;
        *.iso)
            iso=$file
            JIGDO=0
            ;;
        *.template|*.torrent)
            ;;
        *)
            echo "Found unexpected file $file!"
            exit 1
            ;;
    esac

    for SUM in $CHECKSUMS; do
        UPSUM=$(echo $SUM | tr 'a-z' 'A-Z')
        FILE=$UPSUM"SUMS"$EXT
        CMD="$SUM"sum

        if [ "$iso"x != ""x ]; then
            grep -q $iso $FILE
            if [ $? -ne 0 ] ; then
                CKSUM=""
                if [ "$JIGDO" == 1 ] ; then
                    CKSUM=$(zcat -f $file | \
                                grep -i "Image Hex $CMD" | \
                                awk '{print $5}')
                fi
                if [ "$CKSUM"x != ""x ] ; then
                    echo "$CKSUM  $iso" >> $FILE
                    grep $iso $FILE
                else
                    echo "$JIGDO cannot provide jigdo help for $SUM for $iso, doing it the long way with $CMD"
                    $CMD $iso >> $FILE
                    grep $iso $FILE
                fi
            fi
        fi

        # Also add the template, jigdo and torrent files to the SUMS,
        # if they exist
        case $file in
            *.template|*.jigdo|*.torrent)
                $CMD $file >> $FILE
                grep $file $FILE
                ;;
        esac
    done
done
