package backend

import (
	"context"
	"kpt-tmr-group/model"
	"kpt-tmr-group/pkg/jwt"
	"kpt-tmr-group/pkg/xerr"
	operationPb "kpt-tmr-group/proto/go/backend/operation"
)

// Auth 用户登录
func (s *StoreEntry) Auth(ctx context.Context, auth *operationPb.UserAuth) (*operationPb.SystemToken, error) {
	systemUser := &model.SystemUser{}

	if err := s.DB.Where("name = ?", auth.UserName).Find(systemUser).Error; err != nil {
		return nil, xerr.WithStack(err)
	}
	if systemUser.Password != auth.Password {
		return nil, xerr.Customf("密码错误,来自用户:%s", auth.UserName)
	}

	token, err := jwt.GenerateToken(systemUser.Name, systemUser.Password)
	if err != nil {
		return nil, xerr.WithStack(err)
	}
	if token == "" {
		return nil, xerr.Custom("获取token错误")
	}

	return &operationPb.SystemToken{
		Token: token,
	}, nil
}

// GetUserInfo 获取用户信息
func (s *StoreEntry) GetUserInfo(ctx context.Context, token string) (*operationPb.UserAuth, error) {
	systemUser := &model.SystemUser{}
	claims, err := jwt.ParseToken(token)
	if err != nil {
		return nil, xerr.WithStack(err)
	}
	if claims.Username == "" {
		return nil, xerr.Custom("token解析失败")
	}

	if err = s.DB.Where("name = ?", claims.Username).Find(systemUser).Error; err != nil {
		return nil, xerr.WithStack(err)
	}

	return systemUser.SystemUserFormat(), nil
}