package utils

import (
	"errors"
	"fmt"
	"github.com/kataras/iris/v12"
	"github.com/sirupsen/logrus"
	"main/database"
	"main/model"
	"strings"
)

var UserList []model.Userinfo

// GetLoginUser 根据token获取用户,返回用户信息
func GetLoginUser(ctx iris.Context) model.Userinfo {
	auth := ctx.GetHeader("Authorization")
	fmt.Println(auth)
	if auth == "" || !strings.Contains(auth, "Bearer") {
		ctx.StatusCode(iris.StatusUnauthorized)
		ctx.SetErr(errors.New("未登录"))
		logrus.Warningln("请求未携带token信息")
		return model.Userinfo{}
	}
	var tokens []model.JwtKeys
	db := database.GetInstance().GetMysqlDb()
	fmt.Println(strings.Split(auth, " ")[1])
	if err := db.Where("token = ?", strings.Split(auth, " ")[1]).Find(&tokens).Error; err != nil {
		logrus.Errorln("sql执行失败：", err)
	}
	if len(tokens) == 0 {
		ctx.StatusCode(iris.StatusUnauthorized)
		ctx.SetErr(errors.New("未登录"))
		logrus.Warningln(auth, "token信息无效")
		return model.Userinfo{}
	} else {
		return GetUserInfo(tokens[0].Username)
	}
	//foobar := auth.Claims.(jwt.MapClaims)
	//for key, value := range foobar {
	//	if key == "username" {
	//		return GetUserInfo(value.(string))
	//	}
	//}
	//ctx.StatusCode(iris.StatusInternalServerError)
	//ctx.SetErr(errors.New("系统错误，请联系管理员"))
	//logrus.Errorln("token存在但获取用户信息失败")
	//return model.Userinfo{}
}

// GetUserInfo 根据用户名获取用户信息，先更新本地数据
func GetUserInfo(username string) model.Userinfo {
	if len(UserList) == 0 {
		logrus.Warnln("暂存用户列表为空，刷新数据")
		UpdateUserInfo()
	}
	for _, u := range UserList {
		if u.Username == username {
			return u
		}
	}
	logrus.Warnln("未找到对应的用户信息")
	return model.Userinfo{}
}

// UpdateUserInfo 更新当前用户信息
func UpdateUserInfo() {
	db := database.GetInstance().GetMysqlDb()
	if err := db.Find(&UserList).Error; err != nil {
		logrus.Errorln("sql执行失败：", err)
	}
	logrus.Infoln("刷新暂存用户列表")
}
