package network

import (
	"context"
	"net"
	"time"

	manet "github.com/multiformats/go-multiaddr-net"
)

// Dial connects to a remote node by address.
func Dial(ctx context.Context, addr Address) (net.Conn, error) {
	return dialContext(ctx, addr, 0)
}

// DialWithTimeout connects to a remote node by address with timeout.
func DialWithTimeout(ctx context.Context, addr Address, timeout time.Duration) (net.Conn, error) {
	return dialContext(ctx, addr, timeout)
}

func dialContext(ctx context.Context, addr Address, timeout time.Duration) (net.Conn, error) {
	dialer := manet.Dialer{}
	dialer.Timeout = timeout

	return dialer.DialContext(ctx, addr)
}