package api

import (
	"strconv"

	"github.com/gin-gonic/gin"
	"github.com/pingcap/errors"

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

// auth headers refer to https://pingcap.feishu.cn/wiki/wikcnV3ys8xOBJNe0qNzbMNYtMe
func getUserId(g *gin.Context) (uid uint64, err error) {
	// `dbaasUser` is ensured by auth middleware.
	dbaasUser := session.GetDbaasUser(g)
	if dbaasUser == nil {
		return 0, errors.New("invalid user header")
	}
	return dbaasUser.Id, err
}

func getOrgAndClusterIDFromPath(g *gin.Context) (oid, cid uint64, err error) {
	oidS := g.Param("org")
	oid, err = strconv.ParseUint(oidS, 10, 64)
	if oidS == "" || err != nil {
		return 0, 0, errors.Errorf("invalid oid: %d", oid)
	}
	cidS := g.Param("cluster")
	cid, err = strconv.ParseUint(cidS, 10, 64)
	if cidS == "" || err != nil {
		return 0, 0, errors.Errorf("invalid cid: %d", cid)
	}
	return oid, cid, nil
}
