package persona

// ValidateOption configures validation behavior.
type ValidateOption func(*validateConfig)

type validateConfig struct {
	strictMode        bool
	allowRareFeatures bool
	skipPlausibility  bool
	skipConsistency   bool
	skipMorphology    bool
}

func defaultValidateConfig() *validateConfig {
	return &validateConfig{
		strictMode:        false,
		allowRareFeatures: false,
		skipPlausibility:  false,
		skipConsistency:   false,
		skipMorphology:    false,
	}
}

// WithStrictMode enables strict validation that fails on warnings.
// By default, only errors cause validation to fail.
func WithStrictMode() ValidateOption {
	return func(c *validateConfig) {
		c.strictMode = true
	}
}

// WithAllowRareFeatures allows rare but possible feature combinations.
// By default, rare features (< 1% probability) are treated as errors.
func WithAllowRareFeatures() ValidateOption {
	return func(c *validateConfig) {
		c.allowRareFeatures = true
	}
}

// WithSkipPlausibility skips ethnicity plausibility checks.
// Use this for fantasy characters that don't need realistic features.
func WithSkipPlausibility() ValidateOption {
	return func(c *validateConfig) {
		c.skipPlausibility = true
	}
}

// WithSkipConsistency skips cross-attribute consistency checks.
func WithSkipConsistency() ValidateOption {
	return func(c *validateConfig) {
		c.skipConsistency = true
	}
}

// WithSkipMorphology skips humanoid morphology validation.
func WithSkipMorphology() ValidateOption {
	return func(c *validateConfig) {
		c.skipMorphology = true
	}
}
