package sso

import (
	"context"
	"eta/eta_mini_crm_ht/rpc"
	"eta/eta_mini_crm_ht/utils"
	"fmt"
	"sync"
)

var (
	once           sync.Once
	rpcPool        utils.ClientPool
	SSOServiceImpl *SSOService
)

type SSOService struct {
	ssoRPCService
}
type ssoRPCService struct {
	rpc.DefaultRpcClient
}

func GetSSOService() *SSOService {
	once.Do(func() {
		c := ssoRPCService{}
		rpcPool = c.GetPool(utils.SSO_URL)
		SSOServiceImpl = &SSOService{c}
	})
	return SSOServiceImpl
}

func (s *SSOService) SSOLogin(request *LoginRequest) {
	conn := rpcPool.Get()
	defer rpcPool.Put(conn)
	ssoLoginService := NewSSOLoginClient(conn)
	s.WrapSign(request, func(ctx context.Context, request interface{}) (err error) {
		loginReq := request.(*LoginRequest)
		rep, err := ssoLoginService.Login(ctx, loginReq)
		if err != nil {
			fmt.Printf("rpc error: %v", err)
		} else {
			fmt.Printf("rpc result: %v", rep)
		}
		return
	})
}
