package common

import (
	"go-admin/pkg/cryptohelper/jwthelper"
	"strconv"

	"github.com/gin-gonic/gin"
)

// 通过原生 token 获取登录用户 ID，判断是否登录。
// 注：该方法未经过登录中间件，从原始 token 中解析出登录信息，而非从已解析的 token 串中获取登录信息。
func GetUserIdByToken(ctx *gin.Context) int {
	token := ctx.GetHeader("token")
	if len(token) == 0 {
		return 0
	}
	// 解析token
	flag, rew := jwthelper.MidValidToken(token, 3)
	if flag < 0 || len(rew) == 0 {
		return 0
	}

	loginUser := jwthelper.GetLoginUserJwt(rew)

	return loginUser.UserID
}

// 获取操作系统：1-Android，2-IOS，3-PC
func GetOS(ctx *gin.Context) int {
	osStr := ctx.GetHeader("os")      // 获取请求头中的"os"字段
	osInt, err := strconv.Atoi(osStr) // 转换为整数
	if err != nil {
		return 0 // 如果转换失败，返回0
	}
	return osInt
}

// 获取 设备ID
func GetDeviceID(ctx *gin.Context) string {
	device := ctx.GetHeader("device_id") // 获取请求头中的"os"字段

	return device
}

// 获取 language，默认语言：zh_CN
// 英语 en
// 日本语 jp
// 韩语 kr
// 马来西亚语 my
// 泰国语 th
// 越南语 vn
// 简体中文 zh_CN
// 繁体中文 zh_HK
func GetLanguage(ctx *gin.Context) string {
	lang := ""

	// val, exits := ctx.Get("language")
	val2 := ctx.Request.Header.Get("Accept-Language")

	if val2 == "" {
		lang = "zh_CN"
	} else if val2 != "" {
		lang = val2
	}

	return lang
}

// 根据token获取当前userid
func GetUserId(ctx *gin.Context) int {
	token := ctx.GetHeader("ParseToken") // .Request.Header.Peek("token")
	// loghelper.Debug("token:  " + token)
	if len(token) == 0 {
		return 0
	}
	tokenItem := jwthelper.GetLoginUserJwt(token)
	return tokenItem.UserID
}
