package statements

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

	"github.com/pingcap-inc/clinic/pkg/ngm/statements/impl"
	"github.com/pingcap-inc/clinic/pkg/ngm/storage"
	"github.com/pingcap-inc/clinic/pkg/o11y"
)

func InitStatementsApi(g *gin.RouterGroup, s *Service) {
	g.GET("/statements/datasource", s.DatasourceHandler)
	g.GET("/statements/available_fields", s.AvailableFieldsHandler)
	g.GET("/statements/field_values", s.FieldValuesHandler)
	g.GET("/statements/stmt_types", s.StmtTypesHandler)
	g.GET("/statements/list", s.ListHandler)
	g.GET("/statements/summary", s.SummaryHandler)
	g.GET("/statements/topstats", s.TopStatsHandler)
	g.GET("/statements/plans", s.PlansHandler)
	g.GET("/statements/plan/detail", s.DetailHandler)
}

func NewStatementsService(env string, stores storage.StorageFactory, o11yCli *o11y.Client) *Service {
	return &Service{Query: impl.NewStatementImpl(env, stores), Env: env, o11yCli: o11yCli}
}
