# shellcheck shell=dash disable=2016
___X_CMD_SCOOP_IS_AVAILABLE=
___x_cmd_scoop___env_available(){
    if [ -z "$___X_CMD_SCOOP_IS_AVAILABLE" ]; then
        if ___x_cmd os is win || ___x_cmd os is wsl; then
            ___X_CMD_SCOOP_IS_AVAILABLE=0
        else
            ___X_CMD_SCOOP_IS_AVAILABLE=1
        fi
    fi
    return "$___X_CMD_SCOOP_IS_AVAILABLE"
}

___x_cmd_scoop___path_add(){
    local x_=; ___x_cmd_scoop___path_shim_ || return $?
    local scoop_path="$x_"
    if [ ! -d "$scoop_path" ]; then
        if [ -d "/mnt" ]; then
            local scoop_global="/mnt/c/ProgramData/scoop"
        else
            local scoop_global="c/ProgramData/scoop"
        fi

        for i in "$SCOOP" "$SCOOP_GLOBAL" "$scoop_global" ; do
            [ -d "$i" ] || continue
            ___x_cmd path add_existed_folder "$i"
            break
        done

        [ -d "$i" ] || ___x_cmd_scoop___install || return 1
        ___x_cmd mkdirp "$scoop_path"
    fi
    ___x_cmd path add_existed_folder "$scoop_path"
}

___x_cmd_scoop___path_shim_(){
    x_=; ___x_cmd_scoop___home_
    x_="${x_}/shims"
}

___x_cmd_scoop___home_(){
    if [ -n "$___X_CMD_SCOOP_ROOT_PATH" ]; then
        x_="$___X_CMD_SCOOP_ROOT_PATH"
    else
        local root_path=
        root_path="$( ___x_cmd_scoop___bin config root_path )" 2>/dev/null
        if [ -z "$root_path" ] || { [ "$root_path" = "${root_path#*/}" ] && [ "$root_path" = "${root_path#*\\}" ]; }; then
            root_path="$( ___x_cmd pwsh -Command Write-Host \$Env:UserProfile\\scoop )" 2>/dev/null || return $?
        fi
        root_path="$( ___x_cmd pwsh path win_to_linux "$root_path" )" || return $?
        ___X_CMD_SCOOP_ROOT_PATH="$root_path"
        x_="$root_path"
    fi
}

___x_cmd_scoop___fzf_(){
    x_=; ___x_cmd_scoop___home_
    [ -d "$x_" ] || N=scoop M="Not found scoop root path" log:ret:1
    ___x_cmd yq --preparecmd || return $?

    local mod="${___X_CMD_SCOOP_FZF_MOD:-scoop}"
    x_="$(
        ___X_CMD_RUNMODE="$___X_CMD_RUNMODE" \
        ___x_cmdexe scoop --fzfdata "$mod" "$@"
    )"
}

___x_cmd_scoop___fzfdata(){
    local mod="${1}"; shift
    "$@" | {
        ___X_CMD_SCOOP_ROOT_PATH="$___X_CMD_SCOOP_ROOT_PATH" \
        ___x_cmd fzf --ansi --reverse --cycle --exit-0 \
            --height 50% --preview-window right:70% \
            --preview='___x_cmdexe '"${mod}"' --fzfinfo {1} {2}'
    }
}

___x_cmd_scoop___fzfinfo(){
    local software="$1"
    local bucket="$2"
    local x_=; ___x_cmd_scoop___home_
    [ -d "$x_" ] || N=scoop M="Not found scoop root path" log:ret:1
    local fp="${x_}/buckets/${bucket}/bucket/${software}.json"
    [ -f "$fp" ] || return $?
    printf "file: %s\n" "$fp"
    < "$fp" ___x_cmd j2y | ___x_cmd yq -C
}

___x_cmd_scoop___parse_scoop_list(){
    "$@" | ___x_cmd_cmds awk  '
            IS_PKG != 1{
                if($1 == "----"){ IS_PKG = 1 };
                next;
            }
            (IS_PKG == 1) && ($0 ~ "^[a-zA-Z0-9_-]"){
                printf("%-29s %-9s %s\n", $1, $3, $2)
            }
    '
}

___x_cmd_scoop___parse_qs_list(){
    ___x_cmd_cmds awk '
($0 ~ "^[^ ]"){
    bucket = $1
    bucket = substr( bucket, 2, length(bucket)-2 )
    next
}
($0 != ""){
    name = $1
    $1 = ""
    info = $0
    printf("%-29s %s%s\n", name, bucket, info)
}
'
}