package arn

// AnimeFinder holds an internal map of ID to anime mappings
// and is therefore very efficient to use when trying to find
// anime by a given service and ID.
type AnimeFinder struct {
	idToAnime map[string]*Anime
}

// NewAnimeFinder creates a new finder for external anime.
func NewAnimeFinder(mappingName string) *AnimeFinder {
	finder := &AnimeFinder{
		idToAnime: map[string]*Anime{},
	}

	for anime := range StreamAnime() {
		id := anime.GetMapping(mappingName)

		if id != "" {
			finder.idToAnime[id] = anime
		}
	}

	return finder
}

// GetAnime tries to find an external anime in our anime database.
func (finder *AnimeFinder) GetAnime(id string) *Anime {
	return finder.idToAnime[id]
}