package persona

// VoiceDNA contains all voice specifications for audio/video generation.
// These characteristics define the character's unique vocal identity for TTS.
type VoiceDNA struct {
	// Pitch is the fundamental vocal pitch category.
	Pitch PitchCategory `json:"pitch" yaml:"pitch"`

	// PitchRange describes the range of pitch variation.
	PitchRange PitchRangeCategory `json:"pitch_range" yaml:"pitch_range"`

	// Tone is the overall vocal tone quality.
	Tone ToneCategory `json:"tone" yaml:"tone"`

	// Timbre is the vocal texture/quality.
	Timbre TimbreCategory `json:"timbre" yaml:"timbre"`

	// Accent is the accent family.
	Accent AccentCategory `json:"accent" yaml:"accent"`

	// AccentStrength is the intensity of the accent.
	AccentStrength AccentStrengthCategory `json:"accent_strength" yaml:"accent_strength"`

	// Cadence is the speaking rhythm pattern.
	Cadence CadenceCategory `json:"cadence" yaml:"cadence"`

	// RhythmPattern describes the speech rhythm.
	RhythmPattern RhythmPatternCategory `json:"rhythm_pattern" yaml:"rhythm_pattern"`

	// Volume is the characteristic speaking volume.
	Volume VolumeCategory `json:"volume" yaml:"volume"`

	// Clarity is the articulation clarity.
	Clarity ClarityCategory `json:"clarity" yaml:"clarity"`

	// Expressiveness is the emotional range in speech.
	Expressiveness ExpressivenessCategory `json:"expressiveness" yaml:"expressiveness"`
}

// Pitch categories
type PitchCategory string

const (
	PitchVeryLow  PitchCategory = "very_low"
	PitchLow      PitchCategory = "low"
	PitchMedium   PitchCategory = "medium"
	PitchHigh     PitchCategory = "high"
	PitchVeryHigh PitchCategory = "very_high"
)

// Pitch range categories
type PitchRangeCategory string

const (
	PitchRangeNarrow   PitchRangeCategory = "narrow"
	PitchRangeModerate PitchRangeCategory = "moderate"
	PitchRangeWide     PitchRangeCategory = "wide"
)

// Tone categories
type ToneCategory string

const (
	ToneWarm    ToneCategory = "warm"
	ToneCool    ToneCategory = "cool"
	ToneNeutral ToneCategory = "neutral"
	ToneRich    ToneCategory = "rich"
	ToneBright  ToneCategory = "bright"
)

// Timbre categories
type TimbreCategory string

const (
	TimbreClear   TimbreCategory = "clear"
	TimbreSmooth  TimbreCategory = "smooth"
	TimbreHusky   TimbreCategory = "husky"
	TimbreBreathy TimbreCategory = "breathy"
	TimbreRich    TimbreCategory = "rich"
	TimbreCrisp   TimbreCategory = "crisp"
)

// Accent categories
type AccentCategory string

const (
	AccentNorthAmerican AccentCategory = "north_american"
	AccentBritish       AccentCategory = "british"
	AccentAustralian    AccentCategory = "australian"
	AccentGlobalEnglish AccentCategory = "global_english"
	AccentNonNative     AccentCategory = "non_native"
)

// Accent strength categories
type AccentStrengthCategory string

const (
	AccentStrengthSubtle   AccentStrengthCategory = "subtle"
	AccentStrengthModerate AccentStrengthCategory = "moderate"
	AccentStrengthStrong   AccentStrengthCategory = "strong"
)

// Cadence categories
type CadenceCategory string

const (
	CadenceVerySlow CadenceCategory = "very_slow"
	CadenceSlow     CadenceCategory = "slow"
	CadenceMedium   CadenceCategory = "medium"
	CadenceFast     CadenceCategory = "fast"
	CadenceVeryFast CadenceCategory = "very_fast"
)

// Rhythm pattern categories
type RhythmPatternCategory string

const (
	RhythmPatternSteady   RhythmPatternCategory = "steady"
	RhythmPatternVariable RhythmPatternCategory = "variable"
	RhythmPatternDynamic  RhythmPatternCategory = "dynamic"
)

// Volume categories
type VolumeCategory string

const (
	VolumeSoft     VolumeCategory = "soft"
	VolumeModerate VolumeCategory = "moderate"
	VolumeLoud     VolumeCategory = "loud"
)

// Clarity categories
type ClarityCategory string

const (
	ClarityCrisp   ClarityCategory = "crisp"
	ClarityNatural ClarityCategory = "natural"
	ClarityRelaxed ClarityCategory = "relaxed"
)

// Expressiveness categories
type ExpressivenessCategory string

const (
	ExpressivenessMonotone   ExpressivenessCategory = "monotone"
	ExpressivenessModerate   ExpressivenessCategory = "moderate"
	ExpressivenessExpressive ExpressivenessCategory = "expressive"
	ExpressivenessAnimated   ExpressivenessCategory = "animated"
)
