package grpcli

import (
	"context"
	"sync"

	"github.com/tidbcloud/account/idl/pbgen/proto/acl"
	"github.com/tidbcloud/metrics-integration/global/internal/infrastructure/config"
	"github.com/tidbcloud/pkgv2/bizerr"
)

var (
	accountAclSvcOnce sync.Once
	accountAclSvcCli  acl.AccessServiceClient
)

func getAccountAclSvcClient() acl.AccessServiceClient {
	accountAclSvcOnce.Do(func() {
		conn := MustBuildGrpcClientConnection(context.Background(), config.Global().GrpcConfig.AccountAclSvcAddr)
		accountAclSvcCli = acl.NewAccessServiceClient(conn)
	})

	return accountAclSvcCli
}

func GetOpenAPIAccess(ctx context.Context, req *acl.GetOpenAPIAccessReq) (*acl.GetOpenAPIAccessResp, bizerr.BizError) {
	client := getAccountAclSvcClient()

	resp, e := client.GetOpenAPIAccess(ctx, req)
	if e != nil {
		return resp, bizerr.WrapGrpcError(e, "GetOpenAPIAccess")
	}
	return resp, nil
}

func GetDelegateJwtByUser(ctx context.Context, req *acl.GetJwtByUserReq) (*acl.GetJwtByUserResp, bizerr.BizError) {
	client := getAccountAclSvcClient()

	resp, err := client.GetJwtByUser(ctx, req)
	if err != nil {
		return resp, bizerr.WrapGrpcError(err, "GetJwtByUser")
	}

	return resp, nil
}
