# shellcheck shell=dash

___x_cmd_go_star_la(){
    [ "$#" -gt 0 ] ||  set -- --app
    local datamode=;
    local op="$1"; shift
    case "$op" in
        -h|--help)      ___x_cmd help -m go star la "$@";   return ;;

        -j|--json)      datamode="json" ;;
        -c|--csv)       datamode="csv"  ;;
        --app)          datamode="app"  ;;
    esac
    ___x_cmd_go_star_la___"$datamode"
}

___x_cmd_go_star_la___app(){
    if ___x_cmd_is_stdout2tty; then
        ___x_cmd_go_star_la___app_
    else
        ___x_cmd_go_star_la___csv
    fi
}


___x_cmd_go_star_la___csv(){
    ___x_cmd_go_star_la___json \
        | ___x_cmd jo 2c            .name .author .folder .default_branch .description .url \
        | ___x_cmd csv header --add  name  author  folder  default_branch  description  url
}


___x_cmd_go_star_la___yml(){
    ___x_cmd_go_star_la___json | ___x_cmd j2y
}

___x_cmd_go_star_la___json(){
    ___x_cmd_go_star_la___raw
}

___x_cmd_go_star_la___raw(){
    ___x_cmd ccmd 10m -- ___x_cmd curl -s https://codeberg.org/x-cmd-go/star/raw/branch/v0.0.0/release/all.json
}

___x_cmd_go_star_la___app_(){
    local ___X_CMD_CSV_APP_DATA_url
    local ___X_CMD_CSV_APP_DATA_name
    local ___X_CMD_CSV_APP_DATA_folder
    local ___X_CMD_CSV_APP_DATA_author
    local ___X_CMD_CSV_APP_DATA_description
    local ___X_CMD_CSV_APP_DATA_default_branch

    ___X_CMD_CSV_APP_SHBIN_CODE="xrc go"                                   \
    ___x_cmd csv app    --return var --clear                                \
                        --action o Open 'Open on website'                   \
                        --processor '___x_cmd_go_star_la___view_app_open'    \
                        ___x_cmd_go_star_la___csv

    [ -n "$___X_CMD_CSV_APP_DATA_name" ] || return 1
    local name="$___X_CMD_CSV_APP_DATA_name"
    local url="$___X_CMD_CSV_APP_DATA_url"
    local pkgurl="${url#http*//}"

    local id=
    ___x_cmd ui select id "Next:"                       \
        "x go get  '$pkgurl'"                           \
        "get with specific version"                     \
        "Display the package information"               \
        "Visit the official-site -> $url"               \
        "EXIT"     || return $?

    case "$id" in
        1)      go:info "run command => x go get $pkgurl"
                ___x_cmd_go___runmain get "$pkgurl"
                ;;
        2)      go:info "run command => x go star lsv $name"
                ___x_cmd_go_star_lsv                 "$name"
                ;;
        3)      ___x_cmd_go_star_info --yml          "$name"
                ;;
        4)      go:info "x open $url"
                ___x_cmd open                        "$url"
                ;;
        *)      return 0;;
    esac
}

___x_cmd_go_star_la___view_app_open(){
    local op="$*"; local url=
    case "$op" in
        x:request:o*)
            op="${op##*"$___X_CMD_UNSEENCHAR_001"}"
            url="$(___x_cmd_cmds printf "%s" "$op" | ___x_cmd csv awk '{printf("%s", cval(6))}')"
            ___x_cmd browse open "$url"
            ;;
    esac
}