package moniker

import (
	
	
	
)

// New returns a generic namer using the default word lists.
func () Namer {
	return &defaultNamer{
		Descriptor: Descriptors,
		Noun:       Animals,
		r:          rand.New(rand.NewSource(time.Now().UnixNano())),
	}
}

type defaultNamer struct {
	Descriptor, Noun []string
	r                *rand.Rand
}

func ( *defaultNamer) ( string) string {
	 := .Descriptor[.r.Intn(len(.Descriptor))]
	 := .Noun[.r.Intn(len(.Noun))]
	return strings.Join([]string{, }, )
}

func ( *defaultNamer) () string {
	return .NameSep(" ")
}

// NewAlliterator returns a Namer that alliterates.
//
//	wonky wombat
//	racing rabbit
//	alliterating alligator
//
// FIXME: This isn't working yet.
func () Namer {
	return &alliterator{
		Descriptor: Descriptors,
		Noun:       Animals,
		r:          rand.New(rand.NewSource(time.Now().UnixNano())),
	}
}

type alliterator struct {
	Descriptor, Noun []string
	r                *rand.Rand
}

func ( *alliterator) () string {
	return .NameSep(" ")
}
func ( *alliterator) ( string) string {
	return ""
}

// Namer describes anything capable of generating a name.
type Namer interface {
	// Name returns a generated name.
	Name() string
	// NameSep returns a generated name with words separated by the given string.
	NameSep(string) string
}