package admin

import (
	"github.com/druidcaesa/gotool"
	"strings"
	"ulink-admin/config"
	"ulink-admin/frame"
	"ulink-admin/modules/system/models/model"
	"ulink-admin/pkg/base"
	"ulink-admin/pkg/cache"
)

type UserUtils struct {
}

// GetUserInfo 通过jwt获取当前登录用户
func GetUserInfo(c *frame.Context) *model.SysUser {
	token := c.Request.Header.Get("Authorization")
	if token == "" {
		return nil
	}
	s := strings.Split(token, " ")
	if len(s) != 2 {
		return nil
	}
	// 解析token包含的信息
	claims := getJWTCustomClaims(s[1])
	if claims == nil {
		return nil
	}
	info := claims.UserInfo
	return info
}

func GetJWTRedisKey(c *frame.Context) string {
	token := c.Request.Header.Get("Authorization")
	s := strings.Split(token, " ")
	// 解析token包含的信息
	claims := getJWTCustomClaims(s[1])
	if claims == nil {
		return ""
	}
	return claims.RedisKey
}

func GetToken(key string) (string, error) {
	switch config.GetJwtConfig().Cache {
	case "db":

	case "memory":
		tokenInfo := cache.GetToken(key)
		if tokenInfo != nil {
			return tokenInfo.Token, nil
		}
	case "redis":
		return base.RedisDB.GET(key)
	}
	return "", nil
}

// SaveRedisToken 将token存入到redis
func SaveRedisToken(token string) {
	server := config.GetServerCfg()
	if server.Lock == "1" {
		claims := getJWTCustomClaims(token)
		switch config.GetJwtConfig().Cache {
		case "db":

		case "memory":
			cache.SaveToken(claims.RedisKey, claims.RedisTimeOut, token)
		case "redis":
			_, err := base.RedisDB.SETEX(claims.RedisKey, claims.RedisTimeOut, token)
			if err != nil {
				println(err.Error())
			}
		}
	}
}

func getJWTCustomClaims(token string) *CustomClaims {
	j := NewJWT()
	// parseToken 解析token包含的信息
	claims, err := j.ParseToken(token)
	if err != nil {
		gotool.Logs.ErrorLog().Println(err)
		return nil
	}
	return claims
}

// CheckIsAdmin 判断是否是超级管理员
func CheckIsAdmin(user *model.SysUser) bool {
	if user.Id == 1 {
		return true
	} else {
		return false
	}
}