
___x_cmd_weixin_bot_service(){
    [ $# -gt 0 ]    ||      set -- status

    local op="$1";          shift
    case "$op" in
        -h|--help)          ___x_cmd help -m weixin bot service "$@" ; return 0 ;;
        start|stop|restart|status|ensure|log|run)
                            ___x_cmd_weixin_bot_service_"$op" "$@"      ;;
        *)                  N=weixin M="Unknown op -> $op" log:ret:64   ;;
    esac
}

___x_cmd_weixin_bot_service_start(){
    ___x_cmd_weixin_ensurelogin || return "$?"
    ___x_cmd service start      x-weixin-listener   --   x-cmd weixin bot service run "$@"

    ___x_cmd_cmds sleep 1
    ___x_cmd service isalive x-weixin-listener || {
        weixin:error "Failed to start the weixin bot service."
        ___x_cmd service log tail x-weixin-listener
        return 1
    }
    printf "%s " "status: "; ___x_cmd_weixin_bot_service_status
}

___x_cmd_weixin_bot_service_ensure(){
    ___x_cmd_weixin_ensurelogin || return "$?"
    ___x_cmd service ensure      x-weixin-listener   --   x-cmd weixin bot service run "$@"
}

___x_cmd_weixin_bot_service_restart(){
    ___x_cmd_weixin_ensurelogin || return "$?"
    ___x_cmd service restart    x-weixin-listener    --   x-cmd weixin bot service run "$@"
}

___x_cmd_weixin_bot_service_stop(){
    ___x_cmd service stop      x-weixin-listener
}

___x_cmd_weixin_bot_service_status(){
    ___x_cmd service status     x-weixin-listener
}

___x_cmd_weixin_bot_service_log(){
    local ___X_CMD_TAIL_MAIN_OPTS=

    while [ $# -gt 0 ]; do
        case "$1" in
            -n)     ___x_cmd cmdstr ___X_CMD_TAIL_MAIN_OPTS -n "$1";  arg:2:shift   ;;
            -f)     ___x_cmd cmdstr ___X_CMD_TAIL_MAIN_OPTS "$1";     shift         ;;
            *)      break       ;;
        esac
    done

    eval set -- "$___X_CMD_TAIL_MAIN_OPTS" "\"\$@\""

    [ -f "$___X_CMD_WEIXIN_BOT_DATA" ] || N=weixin M="File not found: $___X_CMD_WEIXIN_BOT_DATA" log:ret:1

    ___x_cmd_cmds tail "$@" "$___X_CMD_WEIXIN_BOT_DATA"
}

___x_cmd_weixin_bot_service_run(){
    ___x_cmd_weixin_ensurelogin || return "$?"
    ___x_cmd_weixin_listen_poll --fp "$___X_CMD_WEIXIN_BOT_DATA" || return $?
}

___x_cmd_weixin_bot_service_sub(){
    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)      ___x_cmd help -m weixin bot service subscribe "$@" ; return 0 ;;
            --)             shift ; break ;;
            *)              break ;;
        esac
    done

    ___x_cmd_tailer_sub ""
}

___x_cmd_weixin_bot_service_unsub(){
    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)      ___x_cmd help -m weixin bot service subscribe "$@" ; return 0 ;;
            --)             shift ; break ;;
            *)              break ;;
        esac
    done

    ___x_cmd_tailer_unsub ""
}
