package middleware

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"go-admin/app/admin/models"
	mycasbin "go-admin/pkg/casbin"
	"net/http"

	"go-admin/pkg/jwtauth"
	"go-admin/tools"
)

// AuthCheckRole 权限检查中间件
func AuthCheckRole() gin.HandlerFunc {
	return func(c *gin.Context) {
		data, _ := c.Get(jwtauth.JwtPayloadKey)
		v := data.(jwtauth.MapClaims)
		e := mycasbin.Casbin()
		//检查权限
		res, err := e.Enforce(v["rolekey"], c.Request.URL.Path, c.Request.Method)
		tools.HasError(err, "", 500)

		fmt.Printf("%s [INFO] %s %s %s \r\n",
			tools.GetCurrentTimeStr(),
			c.Request.Method,
			c.Request.URL.Path,
			v["rolekey"],
		)

		if res || v["rolekey"] == "admin" {
			c.Set("userInfo", models.GetUserById(uint32(tools.GetUserId(c))))
			c.Next()
		} else {
			c.JSON(http.StatusOK, gin.H{
				"code": 403,
				"msg":  "对不起，您没有该接口访问权限，请联系管理员",
			})
			c.Abort()
			return
		}
	}
}

// GetCooperativeBusinessId 获取用户合作商id
func GetCooperativeBusinessId(c *gin.Context) uint32 {
	u, b := c.Get("userInfo")
	if !b {
		return 0
	}
	return u.(*models.SysUserB).CooperativeBusinessId
}
