# shellcheck shell=dash

___x_cmd_agent_request___reference_name_(){
    local reference_workspace="$1"
    local reference_name="$2"

    if [ -n "$reference_name" ]; then
        x_="$reference_name"
        return 0
    fi

    local basename_dir
    basename_dir="$(___x_cmd_cmds basename "$reference_workspace")"

    case "$basename_dir" in
        workspace|ws|data|work|project)
            x_="$(___x_cmd_cmds basename "$(___x_cmd_cmds dirname "$reference_workspace")" 2>/dev/null)" || x_=""
            [ -n "$x_" ] || x_="$basename_dir"
            ;;
        *)
            x_="$basename_dir"
            ;;
    esac
}

___x_cmd_agent_request___timeout(){
    local secs="$1"; shift
    (
        x_=""; ___x_cmd pidofsubshell_
        mid="$x_"
        flag=
        trap 'flag=1' USR1

        "$@" & pid=$!

        ___x_cmd_agent_request___timeout_interupt___ & watcher=$!

        wait "$pid"
        local rc=$?

        [ "$flag" != 1 ] || {
            wait "$watcher" 2>/dev/null
            return 124
        }

        kill "$watcher" 2>/dev/null
        wait "$watcher" 2>/dev/null || true
        return "$rc"
    )
    return $?
}

___x_cmd_agent_request___timeout_interupt___(){
    sleep "$secs"
    if kill -0 "$pid" 2>/dev/null; then
        agent:info "Agent request timed out after ${secs}s, sending termination signal to pid $pid"
        kill -s USR1 "$mid"
        ___x_cmd kill tree -s KILL "$pid" # 2>/dev/null
    fi
}

___x_cmd_agent___preview_skill_dirlist(){
    local skill_dirlist="$1"
    [ -n "$skill_dirlist" ] || return 0

    set --
    while read -r dir; do
        [ -d "$dir" ] || continue
        set -- "$@" --skill-dir "$dir"
    done <<A
$skill_dirlist
A
    [ $# -gt 0 ] && ___x_cmd skill ls --tsv "$@" 2>/dev/null
}

___x_cmd_agent___skill_prompt_(){
    local skill_dirlist="$1"
    x_="
<SKILLS>
You can use 'x skill' to discover, add, and manage skills. Run 'x skill -h' for details.
</SKILLS>
"
    if [ -n "$skill_dirlist" ]; then
        local skill_list=""; skill_list="$(___x_cmd_agent___preview_skill_dirlist "$skill_dirlist")"
        [ -n "$skill_list" ] || return 0
        x_="
<SKILLS>
Provided skill directories:

${skill_list}

You can also use 'x skill' to discover and manage skills. Run 'x skill -h' for details.
</SKILLS>
"
    fi
}
