// Package knowledgeqa exposes owner-authenticated browser APIs for the
// server-hosted Knowledge Q&A runtime.
package knowledgeqa

import (
	"github.com/gin-gonic/gin"

	"github.com/tidbcloud/AgentTeam/internal/api"
	"github.com/tidbcloud/AgentTeam/internal/api/dto"
)

func RegisterRoutes(router gin.IRouter, dependencies Dependencies) {
	if router == nil {
		return
	}
	handlers := newRouteHandlers(dependencies)
	group := router.Group("/api/v1/workspaces/:workspaceId",
		api.RequireAuthenticatedUser(dependencies.SessionAuth),
		api.RequireVerifiedIdentity(dependencies.EmailVerificationRequired),
		api.RequireRouteWorkspace(dependencies.WorkspaceStore),
	)
	group.POST("/knowledge-qa/sessions", api.HandleWorkspaceScopedJSON[dto.KnowledgeQACreateSessionRequest](handlers.sessions.CreateSession))
	group.POST("/knowledge-qa/sessions/:sessionId/turns", api.HandleWorkspaceScopedJSON[dto.KnowledgeQACreateTurnRequest](handlers.turns.CreateTurn))
	group.POST("/knowledge-qa/sessions/:sessionId/turns/:turnId/retry", api.HandleWorkspaceScoped(handlers.turns.RetryTurn))
	group.POST("/knowledge-qa/sessions/:sessionId/turns/:turnId/stop", api.HandleWorkspaceScoped(handlers.turns.StopTurn))
	group.POST("/knowledge-qa/sessions/:sessionId/turns/:turnId/feedback", api.HandleWorkspaceScopedJSON[dto.KnowledgeQAFeedbackRequest](handlers.feedback.Upsert))
	group.POST("/knowledge-qa/sessions/:sessionId/turns/:turnId/share", api.HandleWorkspaceScoped(handlers.shares.Create))
	group.POST("/knowledge-qa/shares/open", api.HandleWorkspaceScopedJSON[dto.KnowledgeQAShareOpenRequest](handlers.shares.Open))
	group.GET("/knowledge-qa/shares", api.HandleWorkspaceScoped(handlers.shares.List))
	group.GET("/knowledge-qa/shares/:shareId/evidence/:evidenceId", api.HandleWorkspaceScoped(handlers.shares.OpenEvidence))
	group.GET("/knowledge-qa/shares/:shareId", api.HandleWorkspaceScoped(handlers.shares.Get))
	group.DELETE("/knowledge-qa/sessions/:sessionId/turns/:turnId/feedback", api.HandleWorkspaceScoped(handlers.feedback.Delete))
	group.GET("/knowledge-qa/threads/:threadId/turns", api.HandleWorkspaceScoped(handlers.turns.ListTurns))
	group.GET("/knowledge-qa/sessions/:sessionId/citations/:citationId", api.HandleWorkspaceScoped(handlers.citations.OpenCitation))
	group.DELETE("/knowledge-qa/threads/:threadId", api.HandleWorkspaceScoped(handlers.sessions.DeleteThread))
	group.GET("/knowledge-qa/policy", api.HandleWorkspaceScoped(handlers.policy.GetPolicyStatus))

}
