package runtime

type rt struct {
	logger       *Logger
	modeOverride string
}

// Interface is the interface for the runtime library.
type Interface interface {
	Run([]string) error
}

// Option is a function that configures the runtime.
type Option func(*rt)

// New creates a runtime with the specified options.
func New(opts ...Option) Interface {
	r := rt{}
	for _, opt := range opts {
		opt(&r)
	}
	if r.logger == nil {
		r.logger = NewLogger()
	}
	return &r
}

// WithModeOverride allows for overriding the mode specified in the config.
func WithModeOverride(mode string) Option {
	return func(r *rt) {
		r.modeOverride = mode
	}
}