# shellcheck shell=dash
___x_cmd_tailer_sub(){
    local subtype="always"
    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)      ___x_cmd help -m tailer sub "$@" ; return 0 ;;
            --once)         subtype=once ; shift ;;
            --)             shift ; break ;;
            *)              break ;;
        esac
    done

    local subscribe_dir="$1";       [ -n "$subscribe_dir" ] || N=tailer M="Please provide subscribe folder" log:ret:64
    local tailer_name="$2";         [ -n "$tailer_name" ] || N=tailer M="Please provide tailer name" log:ret:64
    local tailer_mq="$3";           [ -n "$tailer_mq" ] || N=tailer M="Please provide tailer mq folder" log:ret:64

    local subscribe_file="$subscribe_dir/$subtype/$tailer_name"
    ___x_cmd ensurefp "$subscribe_file"
    printf "%s\n" "$tailer_mq" > "$subscribe_file"
}

___x_cmd_tailer_unsub(){
    local subtype="always"
    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)      ___x_cmd help -m tailer unsub "$@" ; return 0 ;;
            --once)         subtype=once ; shift ;;
            --)             shift ; break ;;
            *)              break ;;
        esac
    done

    local subscribe_dir="$1";       [ -n "$subscribe_dir" ] || N=tailer M="Please provide subscribe folder" log:ret:64
    local tailer_name="$2";         [ -n "$tailer_name" ] || N=tailer M="Please provide tailer name" log:ret:64

    ___x_cmd rmrf "$subscribe_dir/$subtype/$tailer_name"
}


___x_cmd_tailer_pub(){
    local subtype="always"
    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)      ___x_cmd help -m tailer pub "$@" ; return 0 ;;
            --once)         subtype=once ; shift ;;
            --)             shift ; break ;;
            *)              break ;;
        esac
    done

    local subscribe_dir="$1";       [ -n "$subscribe_dir" ] || N=tailer M="Please provide subscribe folder" log:ret:64
    local msg="$2";                 [ -n "$msg" ] || N=tailer M="Please provide message" log:ret:64

    local folder="$subscribe_dir/$subtype"
    [ -d "$folder" ] || return 0

    local tailer_name
    local tailer_mq
    local x_=""; ___x_cmd fsiter --file_ "$folder" || return $?
    while read -r tailer_name; do
        read -r tailer_mq < "${folder}/${tailer_name}"
        ___x_cmd tailer send "$tailer_mq" "$msg"
        [ "$subtype" != "once" ] || ___x_cmd rmrf "${folder}/${tailer_name}"
    done <<A
$x_
A
}

___x_cmd_tailer_sublist(){
    [ $# -gt 0 ] || set -- --help

    local subtype=""
    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)      ___x_cmd help -m tailer sublist "$@" ; return 0 ;;
            --once)         subtype=once ; shift ;;
            --always)       subtype=always ; shift ;;
            --)             shift ; break ;;
            *)              break ;;
        esac
    done

    local subscribe_dir="$1";       [ -n "$subscribe_dir" ] || N=tailer M="Please provide subscribe folder" log:ret:64

    if [ -n "$subtype" ]; then
        set -- "$subtype"
    else
        set -- always once
    fi

    local st folder x_ tailer_name tailer_mq
    for st in "$@"; do
        folder="$subscribe_dir/$st"
        [ -d "$folder" ] || continue

        x_=""; ___x_cmd fsiter --file_ "$folder" || continue
        [ -z "$x_" ] && continue

        while read -r tailer_name; do
            read -r tailer_mq < "${folder}/${tailer_name}"
            printf "%s\t%s\t%s\n" "$st" "$tailer_name" "$tailer_mq"
        done <<A
$x_
A
    done
}

