package utils

import (
	"context"
	"fmt"
	"sync"

	"github.com/tidbcloud/account/commons/config"
	"github.com/tidbcloud/account/idl/pbgen/proto/acl"
	"github.com/tidbcloud/tiinf/monitor/tilog"
	tigrpc "github.com/tidbcloud/tiinf/transport/tigrpc/client"
	"go.uber.org/zap"
)

var (
	accountAclOnce sync.Once
	accountAclCli  acl.AccessServiceClient
)

func GetAccountAclClient() acl.AccessServiceClient {
	addr := config.Global().GrpcConfig.AclSvcAddr
	accountAclOnce.Do(func() {
		conn, err := tigrpc.NewClientConn(addr, tigrpc.WithDefault())
		if err != nil {
			panic(fmt.Sprintf("dial account-acl-grpc: %s", err))
		}

		accountAclCli = acl.NewAccessServiceClient(conn)
		tilog.Info(context.Background(), "Initializing account-acl service client", zap.String("addr", addr), zap.Any("err", err))
	})

	return accountAclCli
}
