// Package router
// @Link  https://github.com/bufanyun/hotgo
// @Copyright  Copyright (c) 2023 HotGo CLI
// @Author  Ms <133814250@qq.com>
// @License  https://github.com/bufanyun/hotgo/blob/master/LICENSE
package router

import (
	"context"
	"github.com/gogf/gf/v2/net/ghttp"
	"hotgo/internal/consts"
	controller "hotgo/internal/controller/websocket"
	"hotgo/internal/controller/websocket/handler/admin"
	"hotgo/internal/controller/websocket/handler/common"
	"hotgo/internal/service"
	"hotgo/internal/websocket"
	"hotgo/utility/simple"
)

// WebSocket ws路由配置
func WebSocket(ctx context.Context, group *ghttp.RouterGroup) {
	group.Group(simple.RouterPrefix(ctx, consts.AppWebSocket), func(group *ghttp.RouterGroup) {
		group.Middleware()
		group.Bind(
			controller.Send, // 通过http发送ws消息。方便测试没有放权限中间件，实际使用时请自行调整
		)

		// ws连接中间件
		group.Middleware(service.Middleware().WebSocketAuth)

		// ws
		group.GET("/", websocket.WsPage)
	})

	// 启动websocket监听
	websocket.Start()

	// 注册消息路由
	websocket.RegisterMsg(websocket.EventHandlers{
		"ping":                  common.Site.Ping,      // 心跳
		"join":                  common.Site.Join,      // 加入组
		"quit":                  common.Site.Quit,      // 退出组
		"admin/monitor/trends":  admin.Monitor.Trends,  // 后台监控，动态数据
		"admin/monitor/runInfo": admin.Monitor.RunInfo, // 后台监控，运行信息
	})
}
