package client

import (
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials"
)

// Client represents client for exchanging messages
// with a remote server using Protobuf RPC.
type Client struct {
	cfg
}

// New creates, configures via options and returns new Client instance.
func New(opts ...Option) *Client {
	var c Client
	c.initDefault()

	for _, opt := range opts {
		opt(&c.cfg)
	}

	if c.tlsCfg != nil {
		c.grpcDialOpts = append(c.grpcDialOpts, grpc.WithTransportCredentials(credentials.NewTLS(c.tlsCfg)))
	}

	return &c
}