// Package ws -----------------------------
// @file      : consts.go
// @author    : JJXu
// @contact   : wavingbear@163.com
// @time      : 2025/6/14 09:44
// -------------------------------------------
package ws

// websocket 消息类型
type WsType int

const (
	RegisterType      WsType = iota //用户注册消息
	ErrorType                       //错误消息
	TestType                        //测试消息
	ChatType                        //聊天消息
	NewChatMsgType                  //新消息通知
	AuthorizationType               //token校验通知
)

// 事件总线中的事件类型
type EventType string

const (
	EventConnection  EventType = "connection"   //websocket连接事件
	EventUserJoin    EventType = "user_join"    //用户/客服加入聊天事件
	EventUserLeave   EventType = "user_leave"   //用户离开事件
	EventChatMessage EventType = "chat_message" //聊天消息传递事件
)

// before
type EventProgress string

const (
	EventProgressBefore EventProgress = "before"
	EventProgressAfter  EventProgress = "after"
)

type ListenEvent struct {
	EventType    EventType     `json:"type"`
	ProgressType EventProgress `json:"progress"`
}
type ListenEventData struct {
	ListenEvent
	Client *Client
	Data   any
}
type ListenEventChan chan ListenEventData
type EventListener struct {
	Name         string
	ListenEvents []ListenEvent //需要监听的事件列表
	Chan         ListenEventChan
}