package linguistics

// Registry holds all the text analysis services
type Registry struct {
	Lang LanguageDetector
	Tok  *Tokenizer
	Pos  *POSTagger
	Lem  *Lemmatizer
	Phon *PhoneticEncoder
	Key  *KeywordExtractor
	Poet *PoeticAnalyzer
}

// DefaultRegistry creates a new Registry with default implementations
func DefaultRegistry() *Registry {
	return &Registry{
		Lang: NewLanguageDetector(),
		Tok:  NewTokenizer(),
		Pos:  NewPOSTagger(),
		Lem:  NewLemmatizer(),
		Phon: NewPhoneticEncoder(),
		Key:  NewKeywordExtractor(),
		Poet: NewPoeticAnalyzer(),
	}
}

// Text represents a text to be analyzed
type Text struct {
	ID       uint
	Body     string
	Language string
}

// Token represents a token in a text
type Token struct {
	Text     string
	Position int
	Offset   int
	Length   int
}

// PoeticMetrics represents metrics from poetic analysis
type PoeticMetrics struct {
	RhymeScheme string
	MeterType   string
	StanzaCount int
	LineCount   int
	Structure   string
}
