#compdef arc

# Zsh completion script for arc package manager
# Install to: /usr/share/zsh/site-functions/_arc or $fpath

_arc() {
    local -a commands=(
        'search:Search for packages in repositories'
        'install:Install a package'
        'uninstall:Uninstall a package'
        'remove:Uninstall a package (alias)'
        'info:Check if a package is installed'
        'list:List all installed packages'
        'config:Show configuration information'
    )

    local -a global_options=(
        '(-v --verbose)'{-v,--verbose}'[Enable verbose output]'
        '(-h --help)'{-h,--help}'[Show help message]'
        '--version[Show version information]'
    )

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

    case $state in
        command)
            _describe 'commands' commands
            ;;
        args)
            local cmd=$words[2]
            case $cmd in
                search)
                    _arguments \
                        '--pacman-only[Search in pacman only]' \
                        '--flatpak-only[Search in flatpak only]' \
                        $global_options
                    ;;
                install)
                    _arguments \
                        ':package name:_arc_installed_packages' \
                        $global_options
                    ;;
                uninstall|remove)
                    _arguments \
                        '(-f --force)'{-f,--force}'[Force uninstall]' \
                        ':package name:_arc_installed_packages' \
                        $global_options
                    ;;
                info)
                    _arguments \
                        ':package name:_arc_installed_packages' \
                        $global_options
                    ;;
                list)
                    _arguments \
                        '--pacman-only[Show only pacman packages]' \
                        '--flatpak-only[Show only flatpak packages]' \
                        $global_options
                    ;;
                config)
                    _arguments \
                        '(-a --all)'{-a,--all}'[Show all configuration details]' \
                        $global_options
                    ;;
            esac
            ;;
    esac
}

_arc_installed_packages() {
    local -a packages
    if command -v arc &>/dev/null; then
        packages=(${(f)"$(arc list 2>/dev/null | grep -oE '(pacman|flatpak):[^ ]+' | cut -d: -f2 | sort -u)"})
    fi
    _values 'packages' $packages
}

_arc "$@"
