package secondaryconfirm

import (
	"github.com/gin-gonic/gin"
	"github.com/juju/ratelimit"
)

func InitRouter(engine *gin.Engine, api *API) {
	r := engine.Group("/api/v1/secondaryconfirm")
	r.Use(rateLimitMiddleware())
	r.POST("/apply", api.ApplyHandler)
	r.GET("/diff", api.DiffHandler)
	r.GET("/config_revision/:config_revision_id", api.GetConfigRevisionHandler)
	r.POST("/config_revision:batch_get", api.BatchGetConfigRevisionHandler)
}

func rateLimitMiddleware() gin.HandlerFunc {
	bucket := ratelimit.NewBucketWithRate(10, 30)
	return func(c *gin.Context) {
		if bucket.TakeAvailable(1) < 1 {
			EncodeError(c, ErrTooManyRequest())
			c.Abort()
			return
		}
		c.Next()
	}
}
