package config

import "github.com/spf13/viper"

type opts struct {
	path      string
	configDir string
	envPrefix string
	v         *viper.Viper
}

func defaultOpts() *opts {
	return new(opts)
}

// Option allows to set an optional parameter of the Config.
type Option func(*opts)

// WithConfigFile returns an option to set the system path
// to the configuration file.
func WithConfigFile(path string) Option {
	return func(o *opts) {
		o.path = path
	}
}

// WithConfigDir returns an option to set the system path
// to the directory with configuration files.
func WithConfigDir(path string) Option {
	return func(o *opts) {
		o.configDir = path
	}
}

// WithEnvPrefix returns an option to defines
// a prefix that ENVIRONMENT variables will use.
func WithEnvPrefix(envPrefix string) Option {
	return func(o *opts) {
		o.envPrefix = envPrefix
	}
}

// WithViper returns an option to defines
// a predefined viper.Viper.
func WithViper(v *viper.Viper) Option {
	return func(o *opts) {
		o.v = v
	}
}