package system

import (
	handler "kra/internal/server/handler/system"
	"kra/internal/server/middleware"

	"github.com/gin-gonic/gin"
)

type AutoCodeRouter struct{}

var (
	autoCodePackageApi  = handler.AutoCodePackageApi{}
	autoCodeTemplateApi = handler.AutoCodeTemplateApi{}
	autoCodePluginApi   = handler.AutoCodePluginApi{}
	autoCodeMcpApi      = handler.AutoCodeMcpApi{}
)

// InitAutoCodeRouter 初始化自动代码路由
func (s *AutoCodeRouter) InitAutoCodeRouter(Router *gin.RouterGroup, PublicRouter *gin.RouterGroup) {
	autoCodeRouter := Router.Group("autoCode").Use(middleware.OperationRecordMiddleware())
	autoCodeRouterWithoutRecord := Router.Group("autoCode")
	publicAutoCodeRouter := PublicRouter.Group("autoCode")
	{
		autoCodeRouterWithoutRecord.GET("getDB", autoCodeApi.GetDB)         // 获取数据库
		autoCodeRouterWithoutRecord.GET("getTables", autoCodeApi.GetTables) // 获取对应数据库的表
		autoCodeRouterWithoutRecord.GET("getColumn", autoCodeApi.GetColumn) // 获取指定表所有字段信息
	}
	{
		// 代码包管理
		autoCodeRouter.POST("getPackage", autoCodePackageApi.All)        // 获取所有包
		autoCodeRouter.POST("delPackage", autoCodePackageApi.Delete)     // 删除包
		autoCodeRouter.POST("createPackage", autoCodePackageApi.Create)  // 创建包
		autoCodeRouter.GET("getTemplates", autoCodePackageApi.Templates) // 获取所有模版
	}
	{
		// 代码模板
		autoCodeRouter.POST("preview", autoCodeTemplateApi.Preview)   // 预览代码
		autoCodeRouter.POST("createTemp", autoCodeTemplateApi.Create) // 创建代码
		autoCodeRouter.POST("addFunc", autoCodeTemplateApi.AddFunc)   // 增加方法
	}
	{
		// MCP相关
		autoCodeRouter.POST("mcp", autoCodeMcpApi.MCP)         // 自动创建Mcp Tool模板
		autoCodeRouter.POST("mcpList", autoCodeMcpApi.MCPList) // 获取MCP ToolList
		autoCodeRouter.POST("mcpTest", autoCodeMcpApi.MCPTest) // MCP 工具测试
	}
	{
		// 插件管理
		autoCodeRouter.POST("pubPlug", autoCodePluginApi.Packaged)      // 打包插件
		autoCodeRouter.POST("installPlugin", autoCodePluginApi.Install) // 安装插件
	}
	{
		// 公开路由
		publicAutoCodeRouter.POST("llmAuto", autoCodeApi.LLMAuto)         // LLM自动生成
		publicAutoCodeRouter.POST("initMenu", autoCodePluginApi.InitMenu) // 初始化插件菜单
		publicAutoCodeRouter.POST("initAPI", autoCodePluginApi.InitAPI)   // 初始化插件API
	}
}
