# shellcheck shell=dash disable=SC2034

___x_cmd log init winget
xrc:mod:lib     winget       util install ls proxy mirror ddgo

# https://learn.microsoft.com/en-us/windows/package-manager/winget/

___x_cmd_winget___main(){
    # ___x_cmd_winget_agree || return 1
    [ "$#" -gt 0 ] ||   set -- la
    local op="$1"; shift

    case "$op" in
        :|ddgo)                 ___x_cmd_winget_ddgo                "$@";   return  ;;
        ::|ddgoai)              ___x_cmd_winget_ddgoai              "$@";   return  ;;
        -h|--help)              ___x_cmd help -m winget;                    return  ;;
    esac

    ___x_cmd_winget___env_available || N=winget M='Winget is only available on Windows' log:ret:1
    case "$op" in
        proxy)                  ___x_cmd_winget___proxy             "$@" ;;


        install|add)            ___x_cmd_winget_install             "$@" ;;
        ls|list)                ___x_cmd_winget_ls                  "$@" ;;
        la)                     ___x_cmd_winget_ls --all            "$@" ;;
        mirror)                 ___x_cmd_winget_mirror              "$@" ;;

        --fzfdata)              ___x_cmd_winget___fzfdata           "$@" ;;

        # official command
        show|source|search|upgrade|uninstall| \
        hash|validate|settings|features|export|import|pin)
                                ___x_cmd_winget___bin "$op"         "$@" ;;
        remove|rm)              ___x_cmd_winget___bin uninstall     "$@" ;;
        find)                   ___x_cmd_winget___bin search        "$@" ;;
        update)                 ___x_cmd_winget___bin upgrade       "$@" ;;
        --)                     ___x_cmd_winget___bin               "$@" ;;
        *)                      ___x_cmd_winget___bin "$op"         "$@" ;;
    esac
}

___x_cmd_winget___bin(){
    if ___x_cmd hascmd winget.exe; then
        ___x_cmd_winget___bin(){
            command winget.exe "$@"
        }
    elif [ -x "/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/PowerShell.exe" ]; then
        local x_=; ___x_cmd_winget___pwsh_locate_bin_ || return $?
        ___X_CMD_WINGET_BIN_PATH="$x_"
        ___x_cmd_winget___bin(){
            "$___X_CMD_WINGET_BIN_PATH" "$@"
        }
    else
        ___x_cmd_winget___install || return 1
        # intall winget
        ___x_cmd_winget___bin(){
            command winget "$@"
        }
    fi

    ___x_cmd_winget___bin "$@"
}

# using powershell to locate winget
___x_cmd_winget___pwsh_locate_bin_(){
    x_="$( ___x_cmd pwsh -ExecutionPolicy RemoteSigned -NoProfile -Command 'where.exe winget' 2>/dev/null )"
    [ -n "$x_" ] || return $?
    ___x_cmd pwsh path win_to_linux_ "$x_" || return $?
    [ -f "$x_" ]
}

