
# x install ls
___x_cmd_uninstall_ls(){
    case "$1" in
        -h|--help) ___x_cmd help -m uninstall ls; return 0 ;;
    esac

    if ___x_cmd_is_stdout2tty && ___x_cmd_runmode_allow_manual; then
        ___x_cmd_uninstall_ls___app
    else
        ___x_cmd_uninstall_ls___raw
    fi
}

___x_cmd_uninstall_ls___app(){
    local data=
    data="$( ___X_CMD_RUNMODE="$___X_CMD_RUNMODE" ___x_cmdexe uninstall --fzdata )" || return $?

    local type;local software
    type="${data##*"$___X_CMD_UNSEENCHAR_011"}"
    software="${data%%" "*}"

    [ -n "$software" ] || {
            uninstall:info "Exit because no software is selected."
            return 1
        }

    local id=
    ___x_cmd ui select id "What to do NEXT"  \
        "Uninstall $software installed by $type."                       \
        "View the installation information of $software in $type."      \
        "EXIT"     || return $?
    case "$id" in
        1)      ___x_cmd uninstall rm "$type" "$software"           ;;
        2)      ___x_cmd uninstall --fzfpreview "$type" "$software" ;;
        3)      return 0 ;;
    esac
}

___x_cmd_uninstall_ls___fz_data(){
    ___x_cmd yq --preparecmd
    ___x_cmd_uninstall_ls___raw \
        | ___x_cmd awk '{printf("\033[36m%s\033[0m\n", $0);}' \
        | ___x_cmd_uninstal_ls___fzf                    \
            --preview='___x_cmdexe uninstall --fzfpreview {-1} {1}'  \
            --preview-window=right:70%:wrap
}

___x_cmd_uninstall_ls___fz_preview(){
    local type="${1}"
    local software="${2}"
    case "$type" in
        brew)
            HOMEBREW_COLOR=1 HOMEBREW_NO_EMOJI=0 ___x_cmd brew info "$software" 2>/dev/null ;;
        apt|dnf|apk|pacman)
            ___x_cmd "$type" --fzfpreview "$software"                                       ;;
        scoop)
            ___x_cmd scoop --fzfinfo      "$software"                                       ;;
        pixi)
            ___x_cmd pixi --pkginfo "$software"                                             ;;
        xpkg)
            ___x_cmd pkg info "$software"                                                   ;;
    esac
}

___x_cmd_uninstal_ls___fzf(){
    FZF_DEFAULT_OPTS="
--ansi
--reverse
--height='80%'
--bind='ctrl-w:toggle-preview-wrap'
--bind='ctrl-r:change-preview-window(right,70%|down,40%,99%,border-horizontal|hidden|right)'
"   ___x_cmd fzf "$@"
}


___x_cmd_uninstall_ls___raw(){
    ___x_cmd_uninstall_ls___brew
    ___x_cmd_uninstall_ls___apt
    ___x_cmd_uninstall_ls___dnf
    ___x_cmd_uninstall_ls___apk
    ___x_cmd_uninstall_ls___pacman
    ___x_cmd_uninstall_ls___scoop
    # yum,winget,choco

    ___x_cmd_uninstall_ls___pixi
    # asdf,pkgx

    ___x_cmd_uninstall_ls___xpkg
    # cosmo
}

___x_cmd_uninstall_ls___brew(){
    ___x_cmd_hascmd brew || return 0
    ___x_cmd_cmds brew list | \
        ___x_cmd awk '{ printf("%-16s\t%s\n", $0, "brew"); }'
}

___x_cmd_uninstall_ls___apt(){
    ___x_cmd_hascmd apt || return 0
    ___x_cmd_cmds apt list --installed 2>/dev/null | \
        ___x_cmd awk -F/ 'NR>1{ printf("%-16s\t%s\n", $1, "apt"); }'
}

___x_cmd_uninstall_ls___apk(){
    ___x_cmd_hascmd apk || return 0
    ___x_cmd_cmds apk info 2>/dev/null | \
        ___x_cmd awk '{ printf("%-16s\t%s\n", $1, "apk"); }'
}

___x_cmd_uninstall_ls___dnf(){
    ___x_cmd_hascmd dnf || return 0
    ___x_cmd_cmds dnf list --installed 2>/dev/null | \
        ___x_cmd awk 'NR>1{ sub(/\..*$/, "", $1); printf("%-16s\t%s\n", $1, "dnf") }'
}

___x_cmd_uninstall_ls___pacman(){
    ___x_cmd_hascmd pacman || return 0
    ___x_cmd_cmds pacman -Qq | \
        ___x_cmd awk '{ printf("%-16s\t%s\n", $1, "pacman"); }'
}

# ___x_cmd_uninstall_ls___winget(){
#     ___x_cmd_hascmd winget || return 0
#     ___x_cmd winget list | \
#         ___x_cmd awk '{ printf("%-16s\t%s\n", $0, "winget"); }'
# }

___x_cmd_uninstall_ls___scoop(){
    ___x_cmd_hascmd scoop || return 0
    ___x_cmd scoop list -i | \
        ___x_cmd awk '{ printf("%-16s\t%s\n", $1, "scoop"); }'
}

# ___x_cmd_uninstall_ls___asdf(){
#     ___x_cmd_hascmd asdf || return 0
# }

___x_cmd_uninstall_ls___pixi(){
    ___x_cmd_hascmd pixi || return 0
    ___x_cmd pixi global list 2>/dev/null | \
        ___x_cmd awk -F: '/├──|└──/ { sub(/^├── /, "", $1); sub(/^└── /, "", $1); printf("%-16s\t%s\n", $1, "pixi"); }'
}

___x_cmd_uninstall_ls___xpkg(){
    ___x_cmd pkg ls --installed | \
        ___x_cmd awk -F/ '{ printf("%-16s\t%s\n", $1, "xpkg"); }' | \
        LC_ALL="$___X_CMD_LOCALE_DEF_C" ___x_cmd_cmds_awk '
($0 != ""){
    line = $0
    gsub("\000", "", line)
    if ( ! a[line]++ ) print line;
}
'
}

