#!/bin/sh

EPM=$(basename $0)
EPM_DIRECTORY=$(dirname $0)

EMACS=${EMACS:-emacs}
EMACS_FLAGS="-Q --batch -l $EPM_DIRECTORY/epm.el"

export EPM_RUNNING_P="yes"

usage () {
    cat <<EOF
$EPM - Emacs Package Manager

Usage:
    $EPM <command>
    $EPM [option]

Commands:
    refresh             Download package archives
    install   PACKAGE   Install a package
    reinstall PACKAGE   Reinstall a package
    list                List installed packages
    delete    PACKAGE   Delete a package
    info      PACKAGE   Display information about a package
    search    PATTERN   Search packages
    outdated            List outdated packages
    upgrade   [PACKAGE] Upgrade a outdated package (or all outdated packages)

Options:
    -h, --help          Display this message
    -v, --version       Print version info and exit

Environment Variable:
    EMACS               The command name or executable path of Emacs

Startup File:
    ~/.epm.el           The file contains code to bootstrap package.el
                        Refer to $EPM_DIRECTORY/.epm.el as an example
EOF
}

list () {
    $EMACS $EMACS_FLAGS -f epm-list
}

install () {
    $EMACS $EMACS_FLAGS --eval "(epm-install \"$1\")"
}

reinstall () {
    $EMACS $EMACS_FLAGS --eval "(epm-reinstall \"$1\")"
}

delete () {
    $EMACS $EMACS_FLAGS --eval "(epm-delete \"$1\")"
}

refresh () {
    $EMACS $EMACS_FLAGS --eval "(epm-refresh t)"
}

info () {
    $EMACS $EMACS_FLAGS --eval "(epm-info \"$1\")"
}

search () {
    $EMACS $EMACS_FLAGS --eval "(epm-search \"$1\")"
}

outdated () {
    $EMACS $EMACS_FLAGS -f epm-outdated
}

upgrade () {
    $EMACS $EMACS_FLAGS --eval "(epm-upgrade \"$1\")"
}

version () {
    $EMACS $EMACS_FLAGS -f epm-version
}

COMMAND=$1
case $COMMAND in
    "" | "-h" | "--help")
        usage
        ;;
    "-v" | "--version")
        version
        ;;
    "list" | "search" | "outdated" | "refresh")

        # Prefer multi-column output like ls(1)
        if [ -t 1 ]; then
            export EPM_OUTPUT_TERMINAL_P="yes"
            export EPM_COLUMNS=$( tput cols )
        fi

        shift
        ${COMMAND} $@
        ;;
    "install" | "reinstall" | "info" | "upgrade")
        shift
        ${COMMAND} $@
        ;;
    "delete" | "uninstall" | "remove" )
        shift
        delete $@
        ;;
    *)
        echo "Error: Unknown command: ${COMMAND}"
        exit 1
        ;;
esac
