package api

import (
	"github.com/gin-gonic/gin"
	"github.com/tidbcloud/chaos-svc/idl/pbgen/proto/chaos"
)

type Service struct {
	ChaosSvc chaos.ChaosServiceClient
}

func NewService(chaosSvc chaos.ChaosServiceClient) *Service {
	return &Service{ChaosSvc: chaosSvc}
}

func RegisterRoute(r *gin.Engine, s *Service) {
	routeGroupFault := r.Group("/fault/api")
	routeGroupFault.POST("/orgs/:oid/clusters/:cid", s.EnableFaultDrill)
	routeGroupFault.DELETE("/orgs/:oid/clusters/:cid", s.DisableFaultDrill)
	routeGroupFault.GET("/orgs/:oid/clusters/:cid", s.GetFaultDrillBackendStatus)

	routeGroupFault.GET("/ping", s.PingChaosBackend)

	routeGroupChaos := r.Group("/chaos/api")
	routeGroupChaos.GET("/orgs/:oid/clusters/:cid", s.ListChaosExperiments)
	routeGroupChaos.GET("/orgs/:oid/clusters/:cid/experiments/:eid", s.GetChaosExperiment)
	routeGroupChaos.POST("/draft/orgs/:oid/clusters/:cid", s.CreateDraftChaosExperiment)
	routeGroupChaos.POST("/approve/orgs/:oid/clusters/:cid/experiments/:eid", s.ApproveDraftChaosExperiment)
	routeGroupChaos.POST("/start/orgs/:oid/clusters/:cid/experiments/:eid", s.StartChaosExperiment)
	routeGroupChaos.POST("/summary/orgs/:oid/clusters/:cid/experiments/:eid", s.UpdateExperimentInfo)
	routeGroupChaos.DELETE("/orgs/:oid/clusters/:cid/experiments/:eid", s.DeleteChaosExperiment)
	routeGroupChaos.GET("/actions/schema", s.ListExperimentActionSchema)
	routeGroupChaos.GET("/components/orgs/:oid/clusters/:cid", s.ListComponents)
}
