#compdef pramaana

_pramaana() {
    local -a commands
    commands=(
        'new:Create new reference'
        'edit:Edit existing reference'
        'find:Search for references'
        'import:Import from Zotero'
        'export:Run exports'
        'ls:List references'
        'rm:Remove reference'
        'trash:Move to trash'
        'show:Show contents'
        'open:Open with default application'
    )

    local data_dir
    data_dir=$(python3 -c '
import json
import os
with open(os.path.expanduser("~/.pramaana/config.json")) as f:
    print(os.path.expanduser(json.load(f)["pramaana_path"]))
')

    _arguments -C \
        '1: :->command' \
        '*: :->args'

    case $state in
        command)
            _describe -t commands 'pramaana commands' commands
            ;;
        args)
            case $words[2] in
                ls|rm|trash|show|open|edit|grep|mv|cp|ln)
                    _path_files -W $data_dir
                    ;;
                import)
                    case $words[(($CURRENT - 1))] in
                        --via)
                            _values 'via' 'ln' 'cp' 'mv'
                            ;;
                        *)
                            _files -g "*.bib"
                            ;;
                    esac
                    ;;
                export)
                    local -a exports
                    exports=( ${(f)"$(python3 -c '
import json
import os
with open(os.path.expanduser("~/.pramaana/config.json")) as f:
    config = json.load(f)
    for name in config["exports"].keys():
        print(name)
')"} )
                    _values 'exports' $exports
                    ;;
            esac
            ;;
    esac
}

_pramaana "$@"