package resolver

import (
	"context"
)

// ChainResolver is a chain resolver. The primary resolver is used first and, if that
// fails, we then attempt with the secondary resolver.
type ChainResolver struct {
	Primary   Resolver
	Secondary Resolver
}

// LookupHost implements Resolver.LookupHost
func (c ChainResolver) LookupHost(ctx context.Context, hostname string) ([]string, error) {
	addrs, err := c.Primary.LookupHost(ctx, hostname)
	if err != nil {
		addrs, err = c.Secondary.LookupHost(ctx, hostname)
	}
	return addrs, err
}

// Network implements Resolver.Network
func (c ChainResolver) Network() string {
	return "chain"
}

// Address implements Resolver.Address
func (c ChainResolver) Address() string {
	return ""
}

var _ Resolver = ChainResolver{}