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

import (
	"context"
	"fmt"
	"fonchain-fiee/api/account"
	"fonchain-fiee/api/accountFiee"
	"fonchain-fiee/cmd/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 := c.GetHeader("domain")
	fmt.Println("domain1:", domain)
	if domain == "" {
		domain = config.AppConfig.System.Domain
	}
	fmt.Println("domain2:", domain)
	var err error
	token := c.GetHeader(e.Authorization)
	if token == "" {
		fmt.Println("token is empty")
		code = e.NotLogin
		return
	}

	ctx := context.Background()
	var originId int64 = 0
	var newChatUser *accountFiee.ChatUserData
	check := true
	//fiee token校验
	token, err = secret.GetJwtFromStr(token)
	if err != nil {
		fmt.Println("fiee token err:", err)
		code = e.NotLogin
		return
	}
	var fieeJwtInfo *accountFiee.DecryptJwtResponse
	fieeJwtInfo, err = service.AccountFieeProvider.DecryptJwt(ctx, &accountFiee.DecryptJwtRequest{Token: token, Domain: config.AppConfig.System.Domain})
	if err != nil || fieeJwtInfo.IsOffline {
		check = false
	} else {
		originId = int64(fieeJwtInfo.ID)
		newChatUser = &accountFiee.ChatUserData{
			NickName: fieeJwtInfo.NickName,
			Account:  fieeJwtInfo.Account,
			Role:     1,
			Origin:   config.AppConfig.System.Domain,
			OriginId: int64(fieeJwtInfo.ID),
		}
		domain = config.AppConfig.System.Domain
		fmt.Println("fiee token decrypt success, domain:", domain)
	}
	if !check {
		// fontree token校验
		token, err = secret.GetJwtFromStr(token)
		if err != nil {
			fmt.Println("fontree token err:", err)
			code = e.NotLogin
			return
		}
		var fontreeJwtInfo *account.DecryptJwtResponse
		fontreeJwtInfo, err = service.AccountProvider.DecryptJwt(ctx, &account.DecryptJwtRequest{Token: token, Domain: e.ErpDomain})
		if err != nil || fontreeJwtInfo.IsOffline {
			check = false

		} else {
			check = true
			originId = int64(fontreeJwtInfo.ID)
			newChatUser = &accountFiee.ChatUserData{
				NickName: fontreeJwtInfo.NickName,
				Account:  fontreeJwtInfo.Account,
				Role:     2,
				Origin:   e.ErpDomain,
				OriginId: int64(fontreeJwtInfo.ID),
			}
			domain = e.ErpDomain
			fmt.Println("fontree token decrypt success, domain:", domain)
		}
	}
	if !check {
		fmt.Println("fontree token decrypt err:", err)
		code = e.NotLogin
		return
	}
	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 {
		fmt.Println("获取chat user 失败", err)
		code = e.ErrorNotExistUser
		return
	}
	if userQueryRes.Total == 0 {
		createRes, errs := service.AccountFieeProvider.CreateChatUser(c, newChatUser)
		if errs == nil {
			chatUserInfo = createRes.Data
		} else {
			fmt.Println("创建chat user 失败", errs)
			code = e.ErrorNotExistUser
		}
		return
	}
	chatUserInfo = userQueryRes.List[0]
	return
}