package serializer

import (
	"github.com/fonchain_enterprise/micro-account/api/account"
	"github.com/fonchain_enterprise/micro-account/pkg/common/utils"
	"github.com/fonchain_enterprise/micro-account/pkg/model"
)

type User struct {
	ID         uint   `json:"id"`
	Account    string `json:"account"`
	NickName   string `json:"nickName"`
	Type       int    `json:"type"`
	TelNum     string `json:"telNum"`
	Status     string `json:"status"`
	Avatar     string `json:"avatar"`
	CreateAt   int64  `json:"createAt"`
	RealNameID uint   `json:"realNameId"`
	RealName   string `json:"realName"`
	IDNum      string `json:"idNum"`
}

// BuildUser 序列化用户
func BuildUser(user *model.User) *account.AccountInfo {

	var realName = ""
	var IdNum = ""
	var videos []*account.TrainVideo

	//if user.RealName != nil {
	//	realName = user.RealName.Name
	//	IdNum, _ = user.RealName.GetIDNum(user)
	//}

	//extend := &account.Extend{
	//	JumpTo:          user.Extend.JumpTo,
	//	Lang:            user.Extend.Lang,
	//	CanScan:         user.Extend.CanScan,
	//	ResolutionRatio: user.Extend.ResolutionRatio,
	//}
	//
	//if user.InvitationCode == "" {
	//	user.InvitationCode, _ = SynInvitationCode(user.ID)
	//}

	return &account.AccountInfo{
		ID:     uint64(user.ID),
		TelNum: user.TelNum,
		Status: int32(user.Status),
		//Avatar:      user.AvatarURL(),
		CreateAt:    user.CreatedAt.Format("2006-01-02 15:04:05"),
		RealName:    realName,
		Domain:      *user.Domain,
		IDNum:       IdNum,
		TrainVideos: videos,
		UpdatedAt:   user.UpdatedAt.Format("2006-01-02 15:04:05"),
	}
}
func BuildUsers(items []*model.User) (users []*account.AccountInfo) {
	for _, item := range items {
		user := BuildUser(item)
		users = append(users, user)
	}
	return users
}
func BuildUserList(user []*model.User) []*account.UserListInfo {
	if len(user) == 0 {
		return []*account.UserListInfo{}
	}
	var userList []*account.UserListInfo
	for _, i := range user {
		realName := i.RealName
		if realName == nil {
			realName = &model.RealName{
				Name:               "",
				Sex:                0,
				Nationality:        "",
				DocumentType:       0,
				CertificatePicture: "",
				Validity:           "",
				PlaceOfResidence:   "",
				GroupPhoto:         "",
				Attachment:         "",
			}
		}
		userList = append(userList, &account.UserListInfo{
			Id:                 uint64(i.ID),
			Status:             int32(i.Status),
			Name:               realName.Name,
			Sex:                int32(realName.Sex),
			Nationality:        realName.Nationality,
			DocumentType:       int32(realName.DocumentType),
			CertificatePicture: realName.CertificatePicture,
			Validity:           realName.Validity,
			PlaceOfResidence:   realName.PlaceOfResidence,
			GroupPhoto:         realName.GroupPhoto,
			Attachment:         realName.Attachment,
			RegistrationTime:   i.RegistrationTime,
			AuditTime:          i.AuditTime,
			SubNum:             i.SubNum,
			NotPassRemarks:     i.NotPassRemarks,
			TelNum:             i.TelNum,
			TelAreaCode:        i.TelAreaCode,
			Language:           i.Language,
			SubscriberNumber:   i.SubscriberNumber,
		})
	}
	return userList
}
func SynInvitationCode(userId uint) (string, error) {

	//保存实名信息
	var user *model.User

	if err := model.DB.Model(&model.User{}).First(&user, userId).Error; err != nil {
		return "", err
	}

	invitationCode := utils.DecimalToAny(int(userId))

	updateMap := map[string]interface{}{"invitation_code": invitationCode}
	return invitationCode, model.DB.Model(&model.User{}).Where(&model.User{ID: userId}).Updates(updateMap).Error

}