package auth

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"strings"
	"ulink-admin/frame"
	"ulink-admin/modules/system/service"
	"ulink-admin/pkg/jwt/admin"
)

type ServiceAuthMiddleWare struct {
	PermissionService *service.PermissionService `inject:""`
	LoginService      *service.LoginService      `inject:""`
}

// ServiceAuthCheck 中间件,检查访问权限
func (a *ServiceAuthMiddleWare) ServiceAuthCheck() frame.HandlerFunc {
	return func(permission *frame.Permission, c *gin.Context) bool {
		if permission != nil {
			//获取用户权限,如果用户权限包含了接口权限
			user := admin.GetUserInfo(&frame.Context{c})
			permissions := a.PermissionService.GetMenuPermission(user)
			//fmt.Printf("权限%v", permissions)
			if strings.Contains(strings.Join(*permissions, ",")+",", "*:*:*") || strings.Contains(strings.Join(*permissions, ",")+",", permission.Code) {
				return true
			}
			c.JSON(http.StatusOK, gin.H{
				"status": 808,
				"msg":    "无权限操作",
			})
			return false
		} else {
			return true
		}
		//frame.Throw(frame.BUSINESS_CODE, "没得权限")
		//判断是否股买优惠券服务
		/*url := c.Request.URL.Path
		method := c.Request.Method
		sysCfg := config.GetSysCfg()
		data, err := a.serviceService.MyList()
		if strings.Contains(url, "coupon") && strings.Contains("PUT,POST,DELETE", method) {
			if err == nil {
				if data.Code == 100 {
					isHave := false
					for _, item := range data.Result.Data {
						if item.Service.FeatureSn == sysCfg.CouponSn {
							isHave = true
							break
						}
					}
					if !isHave {
						c.JSON(http.StatusOK, gin.H{
							"status": 808,
							"msg":    "没有购买优惠券服务,无权限操作",
						})
						c.Abort()
						return
					}
				} else {
					c.JSON(http.StatusOK, gin.H{
						"status": 808,
						"msg":    "查询到优惠券服务购买状态出错,无权限操作",
					})
					c.Abort()
					return
				}
			} else {
				c.JSON(http.StatusOK, gin.H{
					"status": 808,
					"msg":    "查询到优惠券服务购买状态出错,无权限操作",
				})
				c.Abort()
				return
			}
		}
		if strings.Contains(url, "integral") && strings.Contains("PUT,POST,DELETE", method) {
			if err == nil {
				if data.Code == 100 {
					isHave := false
					for _, item := range data.Result.Data {
						if item.Service.FeatureSn == sysCfg.IntegralSn {
							isHave = true
							break
						}
					}
					if !isHave {
						c.JSON(http.StatusOK, gin.H{
							"status": 808,
							"msg":    "没有购买积分服务,无权限操作",
						})
						c.Abort()
						return
					}
				} else {
					c.JSON(http.StatusOK, gin.H{
						"status": 808,
						"msg":    "查询到积分服务购买状态出错,无权限操作",
					})
					c.Abort()
					return
				}
			} else {
				c.JSON(http.StatusOK, gin.H{
					"status": 808,
					"msg":    "查询到积分服务购买状态出错,无权限操作",
				})
				c.Abort()
				return
			}
		}*/
	}
}