package fyne

// BuildType defines different modes that an application can be built using.
type BuildType int

const (
	// BuildStandard is the normal build mode - it is not debug, test or release mode.
	BuildStandard BuildType = iota
	// BuildDebug is used when a developer would like more information and visual output for app debugging.
	BuildDebug
	// BuildRelease is a final production build, it is like [BuildStandard] but will use distribution certificates.
	// A release build is typically going to connect to live services and is not usually used during development.
	BuildRelease
)

// Settings describes the application configuration available.
type Settings interface {
	Theme() Theme
	SetTheme(Theme)
	// ThemeVariant defines which preferred version of a theme should be used (i.e. light or dark)
	//
	// Since: 2.0
	ThemeVariant() ThemeVariant
	Scale() float32
	// PrimaryColor indicates a user preference for a named primary color
	//
	// Since: 1.4
	PrimaryColor() string

	// AddChangeListener subscribes to settings change events over a channel.
	//
	// Deprecated: Use AddListener instead, which uses a callback-based API
	// with the callback guaranteed to be invoked on the app goroutine.
	AddChangeListener(chan Settings)

	// AddListener registers a callback that is invoked whenever the settings change.
	//
	// Since: 2.6
	AddListener(func(Settings))

	BuildType() BuildType

	ShowAnimations() bool
}
