#!/bin/sh

if command -v pkgfile > /dev/null; then
    # Command not found hook that uses `pkgfile` package
    # to search through the package index in order to find
    # a package which includes given command, which was resolved
    # and not found, if there are no such packages, only print
    # command not found message
    command_not_found_handler() {
        cmd="$1"
        printf 'zsh: command not found: %s' "$cmd" # print command not found asap, then search for packages
        repos="$(pkgfile "$cmd")"
        if [ -n "$repos" ]; then
            printf '\r%s may be found in the following packages:\n' "$cmd"
            echo "$repos" | while read -r pkg; do
                printf '  %s\n' "$pkg"
            done
        else
            printf '\n'
        fi
        return 127
    }
elif [ -x /usr/lib/command-not-found ] || [ -x /usr/share/command-not-found/command-not-found ]; then
    # Ubuntu handle for bash default command-not-found
    # it works similarely to the above arch alternative,
    # this is based on the original bash implementation
    command_not_found_handler() {
        # check because cmd not found could've been removed in the meantime
        if [ -x /usr/lib/command-not-found ]; then
            /usr/lib/command-not-found -- "$1"
            return $?
        elif [ -x /usr/share/command-not-found/command-not-found ]; then
            /usr/share/command-not-found/command-not-found -- "$1"
            return $?
        else
            printf "%s: command not found\n" "$1" >&2
            return 127
        fi
    }
fi