
___x_cmd_claude_session_ls(){
    [ $# -gt 0 ]    ||  set - --project

    case "$1" in
        -h|--help)      ___x_cmd help -m claude session ls;        return 0 ;;
    esac

    local scope=project
    local fmt=tsv
    while [ $# -gt 0 ]; do
        case "$1" in
            -p|--project)   scope=project   ;;
            -a|--all)       scope=all       ;;
            -j|--json)      fmt=json        ;;
            -t|--tsv)       fmt=tsv         ;;
            -c|--csv)       fmt=csv         ;;
            *)              break           ;;
        esac
        shift
    done

    ___x_cmd_claude_session_ls___"${scope}"___"${fmt}" "$@"
}

# Section: ls --project
___x_cmd_claude_session_ls___project___raw(){
    local project="${1:-"$PWD"}"
    ___x_cmd jq -s --arg project "$project" '
        map(select(.project == $project and .sessionId != null ))
        | group_by(.sessionId)
        | map({
            sessionId: .[0].sessionId,
            project: .[0].project,
            startTime: (map(.timestamp) | min),
            lastActive: (map(.timestamp) | max),
            interactionCount: length,
            inputs: map(.display)
        })
        | sort_by(.lastActive) | reverse
    ' "$___X_CMD_CLAUDE_CODE_HOME_PATH/history.jsonl"
}

___x_cmd_claude_session_ls___project___json(){
    ___x_cmd_claude_session_ls___project___raw "$@"
}

___x_cmd_claude_session_ls___project___tsv(){
    ___x_cmd_claude_session_ls___project___raw "$@" \
        | ___x_cmd jq -r '
            (.[] | [.sessionId, (.lastActive / 1000 | strftime("%Y-%m-%dT%H:%M:%S")), .interactionCount, .inputs[0], .inputs[-1]])
            | @tsv
        '
}

___x_cmd_claude_session_ls___project___csv(){
    ___x_cmd_claude_session_ls___project___raw "$@" \
        | ___x_cmd jq -r '
            (.[] | [.sessionId, (.lastActive / 1000 | strftime("%Y-%m-%dT%H:%M:%S")), .interactionCount, .inputs[0], .inputs[-1]])
            | @csv
        '
}

# EndSection

# Section: ls --all
___x_cmd_claude_session_ls___all___raw(){
    ___x_cmd jq -s '
        map(select(.sessionId != null))
        | group_by(.sessionId)
        | map({
            sessionId: .[0].sessionId,
            project: .[0].project,
            startTime: (map(.timestamp) | min ),
            lastActive: (map(.timestamp) | max ),
            interactionCount: length,
            inputs: map(.display)
        })
        | sort_by(.lastActive) | reverse
    ' "$___X_CMD_CLAUDE_CODE_HOME_PATH/history.jsonl"
}

___x_cmd_claude_session_ls___all___json(){
    ___x_cmd_claude_session_ls___all___raw "$@"
}

___x_cmd_claude_session_ls___all___tsv(){
    ___x_cmd_claude_session_ls___all___raw "$@" \
        | ___x_cmd jq -r '
            (.[] | [.sessionId, (.lastActive / 1000 | strftime("%Y-%m-%dT%H:%M:%S")), .interactionCount, .inputs[0], .inputs[-1], .project])
            | @tsv
        '
}

___x_cmd_claude_session_ls___all___csv(){
    ___x_cmd_claude_session_ls___all___raw "$@" \
        | ___x_cmd jq -r '
            (.[] | [.sessionId, (.lastActive / 1000 | strftime("%Y-%m-%dT%H:%M:%S")), .interactionCount, .inputs[0], .inputs[-1], .project])
            | @csv
        '
}

# EndSection
