# shellcheck shell=dash

xrc ui

___x_cmd log init hub
xrc:mod:lib     hub                 \
                util/index          \
                token cfg           \
                file/_index         \
                access/_index       \
                cc/_index           \
                account/index       \
                keypair/index       \
                org/index           \
                ai/index

if ___x_cmd_is_suitable_advise_env; then
    xrc:mod:lib hub     _advise
fi

___X_CMD_HUB_TMP="$___X_CMD_ROOT_TMP/hub"
___X_CMD_HUB_DATA="$___X_CMD_ROOT_DATA/hub"
___x_cmd mkdirp "${___X_CMD_HUB_DATA}" "${___X_CMD_HUB_TMP}"

___x_cmd_hub___main(){
    local X_help_cmd='___x_cmd_hub___help'
    help:arg-null:parse

    local ___X_CMD_HUB_AI_SERVICE="https://cf-hub.it-9b9.workers.dev/api/v0"
    local ___X_CMD_HUB_LOCAL_CONFIG="${___X_CMD_HUB_LOCAL_CONFIG}"
    local ___X_CMD_HUB_LOCAL_PROFILE="${___X_CMD_HUB_LOCAL_PROFILE}"
    local ___X_CMD_HUB_KEYPAIR_NAME="default"

    local op=
    while [ $# -gt 0 ]; do
        op="$1"; shift
        case "$op" in
            :*:*)
                        ___X_CMD_HUB_LOCAL_CONFIG="${op#:}"
                        ___X_CMD_HUB_LOCAL_CONFIG="${___X_CMD_HUB_LOCAL_CONFIG%%:*}"
                        ___X_CMD_HUB_LOCAL_PROFILE="${op#:"$___X_CMD_HUB_LOCAL_CONFIG":}"
                        ;;
            :*)         ___X_CMD_HUB_LOCAL_PROFILE="${op#:}"         ;;
            --profile)  ___X_CMD_HUB_LOCAL_PROFILE="$1";       shift ;;
            --config)   ___X_CMD_HUB_LOCAL_CONFIG="$1";        shift ;;
            --keypair)  ___X_CMD_HUB_KEYPAIR_NAME="$1";        shift ;;
            *=*)        ___x_cmd_hub_cur "$op" "$@"
                        return ;;
            *)          break ;;
        esac
    done

    endpoint="$(___x_cmd_hub_cfg current --get endpoint)"
    local ___X_CMD_HUB_SERVICE_URL="${endpoint:-"https://cn.hub.x-cmd.com"}"

    case $op in
        --cfg|--cur)
                    "___x_cmd_hub_${op#--}"         "$@" ;;

        login|logout|info|bind)
                    ___x_cmd_hub_account_"$op"      "$@" ;;

        file|access|account|org|keypair|ai|cc|emb|search|_advise)
                    "___x_cmd_hub_$op"              "$@" ;;

        cat|put|eput|link|get|ls|ll|which)
                    ___x_cmd_hub_file_"$op"         "$@" ;;

        *)          ___x_cmd_hub_u_subcmd_invalid "" "$@" ;;
    esac
}

___x_cmd_hub___tsvlabel(){
    ___x_cmd_cmds awk '
        BEGIN{
            FS = "\t"
        }
        {
            print NR "\t" $0
        }
    '
}

___x_cmd_hub___fzfpretty(){
    ___x_cmd_cmds awk '{ gsub(/\\n/, "  ", $0); print }'
}

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