#!/bin/bash

list_vendor_files() {
    find vendor -type f -a \( -iname 'COPYING*' -o -iname 'LICENSE*' \) | sort
}

list_files() {
    goroot="$(go env GOROOT)"
    goid='Go programming language'
    if [ -r "$goroot/LICENSE" ]; then
        echo "${goid}::$goroot/LICENSE"
    elif [ -r /usr/share/licenses/go/LICENSE ]; then
        echo "${goid}::/usr/share/licenses/go/LICENSE"
    else # last restort: HTTP
        echo "${goid}::https://golang.org/LICENSE?m=text"
    fi
    list_vendor_files
}

generate_notice() {
    last=
    $0 -all | while IFS=$'\n' read -r license; do
        pkg="${license%%::*}"
        if [ "$pkg" != "$license" ]; then
            license="${license#${pkg}::}"
        else
            pkg="${pkg#vendor/}"
            pkg="${pkg%/*}"
        fi

        printf "%s" "${last:+'\n\n\n'}"
        last=x

        echo "$pkg" | sed 'p;s/./-/g'
        fetch "${license}"
    done
}

fetch() {
    case "$1" in
        *://*) wget -q -O- "${1#*::}";;
        *) cat "${1#*::}";;
    esac
}

case "${1--gen}" in
    -gen)
        if [ -t 1 ]; then
            generate_notice | ${PAGER:-more}
        else
            generate_notice
        fi
        ;;
    -src) list_vendor_files;;
    -all) list_files;;
    -h)
        echo 'Usage: vendor-licenses [-h|-gen|-src|-all]' >&2
        exit 2
        ;;
    *)
        echo "Unrecognized argument: '$1'" >&2
        exit 1
        ;;
esac
