package middleware

import (
	"github.com/casbin/casbin/v2"
	"github.com/zeromicro/go-zero/core/logx"
	"github.com/zeromicro/go-zero/core/stores/redis"
	"net/http"
	"strings"
)

type AuthorityMiddleware struct {
	Cbn *casbin.Enforcer
	Rds *redis.Redis
}

func NewAuthorityMiddleware() *AuthorityMiddleware {
	return &AuthorityMiddleware{}
}

func (m *AuthorityMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		//obj := r.URL.Path
		//act := r.Method
		next(w, r)
	}
}

func (m *AuthorityMiddleware) batchCheck(cbn *casbin.Enforcer, roles, act, obj string) bool {
	var checkReq [][]any
	for _, v := range strings.Split(roles, ",") {
		checkReq = append(checkReq, []any{v, obj, act})
	}

	result, err := cbn.BatchEnforce(checkReq)
	if err != nil {
		logx.Errorw("Casbin enforce error", logx.Field("detail", err.Error()))
		return false
	}

	for _, v := range result {
		if v {
			return true
		}
	}

	return false
}
