package cloud

import (
	"net/http"
	"strings"

	"github.com/gin-gonic/gin"
	"go.uber.org/fx"

	"github.com/pingcap-inc/clinic/pkg/auth/session"
)

func registerDashboard(r *gin.RouterGroup, s *GlobalDashboardService) {
	dashboard := r.Group("/dashboard")
	dashboard.Use(CloudPermission)
	dashboard.GET("/clusters", s.CloudClusters)
	dashboard.GET("/regions", s.GetRegions)
	dashboard.GET("/clusters2", s.CloudClusters2)
	dashboard.Any("/proxy/*any", s.Proxy)
	dashboard.GET("/reports", s.ReportLinks)
	dashboard.GET("/activeqps", s.GetActiveQPS)
}

var Module = fx.Options(
	fx.Provide(NewGlobalService),
	fx.Invoke(registerDashboard))

func CloudPermission(c *gin.Context) {
	u := session.GetUser(c)
	if u == nil {
		PermisionError(c)
		return
	}

	if !u.Internal {
		PermisionError(c)
		return
	}

	if !strings.HasSuffix(u.Email, "@pingcap.com") && !strings.HasSuffix(u.Email, "@pingcap.cn") {
		PermisionError(c)
		return
	}

	c.Next()
}

func PermisionError(c *gin.Context) {
	resp := map[string]string{"error": "permission deny"}

	c.JSON(http.StatusForbidden, resp)
	c.Abort()
}
