// Package jwt -----------------------------
// @file      : common.go
// @author    : JJXu
// @contact   : wavingbear@163.com
// @time      : 2025/6/12 18:07
// -------------------------------------------
package jwt

import (
	"context"
	"fonchain-fiee/api/account"
	"fonchain-fiee/api/accountFiee"
	"fonchain-fiee/pkg/config"
	"fonchain-fiee/pkg/e"
	"fonchain-fiee/pkg/service"
	"fonchain-fiee/pkg/utils/secret"
	"github.com/gin-gonic/gin"
)

// ParseToChatUser 将token信息转换为聊天室用户信息
func ParseToChatUser(c *gin.Context) (chatUserInfo *accountFiee.ChatUserData, code e.ErrorCodeType) {
	domain := config.Domain
	domainAny, exist := c.Get("domain")
	if exist {
		domain = domainAny.(string)
	}
	var err error
	token := c.GetHeader(e.Authorization)
	if token == "" {
		code = e.NotLogin
		return
	}

	ctx := context.Background()
	var originId int64 = 0
	switch domain {
	case config.Domain:
		//fiee token校验
		token, err = secret.GetJwtFromStr(token)
		if err != nil {
			code = e.NotLogin
			return
		}
		var fieeJwtInfo *accountFiee.DecryptJwtResponse
		fieeJwtInfo, err = service.AccountFieeProvider.DecryptJwt(ctx, &accountFiee.DecryptJwtRequest{Token: token, Domain: domain})
		if err != nil || fieeJwtInfo.IsOffline {
			return
		}
		originId = int64(fieeJwtInfo.ID)
	case "fontree":
		//erp token校验
		token, err = secret.GetJwtFromStr(token)
		if err != nil {
			code = e.NotLogin
			return
		}
		var fontreeJwtInfo *account.DecryptJwtResponse
		fontreeJwtInfo, err = service.AccountProvider.DecryptJwt(ctx, &account.DecryptJwtRequest{Token: token, Domain: domain})
		if err != nil || fontreeJwtInfo.IsOffline {
			code = e.NotLogin
			return
		}
		originId = int64(fontreeJwtInfo.ID)
	}
	var userQueryRes *accountFiee.GetChatUserListResp
	userQueryRes, err = service.AccountFieeProvider.GetChatUserList(c, &accountFiee.GetChatUserListRequest{
		Query:    &accountFiee.ChatUserData{Origin: domain, OriginId: originId},
		Page:     1,
		PageSize: 1,
	})
	if err != nil || userQueryRes.Total == 0 {
		code = e.ErrorNotExistUser
		return
	}
	chatUserInfo = userQueryRes.List[0]
	return
}