# shellcheck shell=dash

___x_cmd_qywx_abot_service(){
    param:void

    [ $# -gt 0 ]    ||      set -- status

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

___x_cmd_qywx_abot_service_start(){
    ___x_cmd_qywx_ensureinit || return "$?"
    ___x_cmd service start      x-qywx-listener   --   x-cmd qywx abot service run "$@"

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

___x_cmd_qywx_abot_service_ensure(){
    ___x_cmd_qywx_ensureinit || return "$?"
    ___x_cmd service ensure     x-qywx-listener   --   x-cmd qywx abot service run "$@"
}

___x_cmd_qywx_abot_service_restart(){
    ___x_cmd_qywx_ensureinit || return "$?"
    ___x_cmd service restart    x-qywx-listener   --   x-cmd qywx abot service run "$@"
}

___x_cmd_qywx_abot_service_stop(){
    ___x_cmd_cmds pkill -f 'websocat -n wss://openws.work.weixin.qq.com'
    ___x_cmd service stop       x-qywx-listener
}

___x_cmd_qywx_abot_service_status(){
    ___x_cmd service status     x-qywx-listener
}

___x_cmd_qywx_abot_service_log(){
    local chatid="$1"
    [ -n "$chatid" ] || N=qywx M="Not Found chat id" log:ret:1

    local fp
    local x_=; ___x_cmd_qywx_abot_data_which_ "$chatid"
    fp="$x_"
    [ -n "$fp" ] || N=qywx M="Message data file not found for [chatid=$chatid]" log:ret:1

    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" "\"\$@\""

    ___x_cmd_cmds tail "$@" "$fp"
}

___x_cmd_qywx_abot_service_run(){
    ___x_cmd qywx listen --fp || return $?
}
