# shellcheck shell=dash

xrc:mod:lib hub ai/convo

___x_cmd_hub_ai(){
    [ $# -gt 0 ] || { ___x_cmd help -m hub ai ; return;}
    local subcmd="$1";shift
    case "$subcmd" in
        -h|--help)      ___x_cmd help -m hub ai ; return  ;;
        chat)           ___x_cmd_hub_ai_chat "$@"     ;;
        agent)          ___x_cmd_hub_ai_agent "$@"    ;;
        convo)          ___x_cmd_hub_ai_convo "$@"  ;;
        *)              ___x_cmd_hub_ai_chat "${subcmd}" "$@"     ;;
    esac
}

___x_cmd_hub_ai_chat(){
    [ $# -gt 0 ] || { ___x_cmd help -m hub ai chat ; return;}
    local op="$1";shift;
    case "$op" in
        --help|-h)
            ___x_cmd_hub___help ai chat
            return;;
        -j|--json)  ___x_cmd_hub_ai___json  "$@";;
        -t|--tsv)   ___x_cmd_hub_ai___tsv   "$@";;
        --fzfinfo)  ___x_cmd_hub_ai___fzfinfo "$@";;
        *)          ___x_cmd_hub_ai___fzf  "$op" "$@";;
    esac

}

___x_cmd_hub_ai___json(){
    ___x_cmd ccmd 12h -- ___x_cmd hub account info -j | (
        ___x_cmd jo env . .id
        ___x_cmd ccmd 1m -- ___x_cmd curl -sSL -X GET -G --data-urlencode question="$*" --data-urlencode userId="$id"  "${___X_CMD_HUB_AI_SERVICE}/ai/aichat"
    )
}

___x_cmd_hub_ai___tsv(){
    ___x_cmd_hub_ai___json "$@" | ___x_cmd jo '.*' | ___x_cmd ja jl2t .id .title .content
}

___x_cmd_hub_ai___fzfinfo(){
    printf "%s" "$@" |  ___x_cmd_cmds awk '{
            $1 = ""
            $2 = ""
            print $0
        }'
}

# Using fzf
___x_cmd_hub_ai___fzf(){
    ___x_cmd_hub_ai___tsv "$@"              \
        |   ___x_cmd_hub___tsvlabel         \
        |   ___x_cmd_hub___fzfpretty        \
        |   ___x_cmd_cmds awk -v FS='\t' 'BEGIN {
                printf("\033[2m%s\t\033[0;36m%-10s\n",  "title", "content");
            }
            {
                printf("\033[2m" "%s\t"  "\033[0;36m" "%-10s\n",$3, $4)
            }'  \
        |   ___x_cmd_hub___fzf --preview="___x_cmdexe hub ai --fzfinfo {}" --preview-window="right:70,wrap"
}

___x_cmd_hub_ai_agent(){
    [ $# -gt 0 ] || { ___x_cmd_hub___help ai agent ; return;}
    local task="$1"
    case "$task" in
        -h|--help) ___x_cmd_hub___help ai agent ; return  ;;
    esac
    local service_token
    service_token="$(___x_cmd_hub_service_verify_)" || return 1
    local ___X_CMD_OTHER_SERVICE_URL="https://agent.x-cmd.com"
    ___x_cmd_hub_u_curl post /api/eci/execute -H "X-Service-Authorization: Bearer $service_token" -- "task=$task" | (
        local success
        local stdout
        local ossurls
        local stderr
        ___x_cmd jo env . .success stdout=.data.stdout stderr=.data.stderr  ossurls=.data.file
        if [ "$success" = "true" ];then
            printf "%s\n" "$stdout"
            [ -z "$ossurls" ] || printf "%s" "Download task file: ${ossurls}"
            return 0
        fi
        [ -z "$stderr" ] || printf "%s" "$stderr"
        return 1
    )
}