package api

import (
	"github.com/gin-gonic/gin"
	"github.com/pingcap/dbaas/cost-metering-service/handler/metricshandler"
	"github.com/pingcap/dbaas/cost-metering-service/log"
	"github.com/pingcap/dbaas/cost-metering-service/utils/ginutils"
	"github.com/pingcap/dbaas/cost-metering-service/utils/version"
	"net/http"
)

// API processes all API call
type API struct {
}

type VersionResp struct {
	Hash string `json:"hash"`
}

var Path2ResourceMap = map[string]string{}

// NewService create the gin engine and setup router
// @title Cost System  API
// @version 1.0
// @description This is a billing system server
// @host 127.0.0.1:19999
// @BasePath /api/v1/cost
func NewService() (*gin.Engine, error) {
	r := gin.Default()
	//Hold it! Don't move! befor  r.Croup group.engin   and use middleware .
	metricshandler.RegisterMetricsRoute(r)
	r.GET("/version", func(c *gin.Context) { c.JSON(http.StatusOK, &VersionResp{Hash: version.GitHash}) })
	billingGroup := r.Group("/api/v1/cost")
	ws := ginutils.MyRoute{Route: billingGroup}

	RegisterRouter(ws)
	log.Info("NewService RegisterRouter end ")
	return r, nil

}
func RegisterRouter(ws ginutils.MyRoute) {
	InitializeMeasureRouter(ws)
	InitializeUnitRouter(ws)
}
