package config

import "flag"

type Version int

type Library struct {
	// filename of the alias' file
	AliasFile string
	// some directory which is going to be
	// the root folder for the library
	BasePath string
	// a list of supported file extensions
	Supported []string
	// a list of ignored words in the files
	Ignored []string
	// print some additional info
	Verbose bool
	// enable directory changes watch
	WatchMode bool
}

func (l Library) GetSupportedExtensions() []string { return l.Supported }

type Monitoring struct {
	Port             int
	URLPrefix        string
	MetricEnabled    bool `json:"metric_enabled"`
	ProfilingEnabled bool `json:"profiling_enabled"`
}

func (c *Monitoring) IsEnabled() bool { return c.MetricEnabled || c.ProfilingEnabled }

type Server struct {
	Address      string
	CacheControl string
	FrameOptions string
	Https        bool
	Tls          struct {
		Address   string
		Domain    string
		HttpsKey  string
		HttpsCert string
	}
}

type Recording struct {
	Enabled bool
	Name    string
	Folder  string
	Zip     bool
}

func (s *Server) WithFlags() {
	flag.StringVar(&s.Address, "address", s.Address, "HTTP server address (host:port)")
	flag.StringVar(&s.Tls.Address, "httpsAddress", s.Tls.Address, "HTTPS server address (host:port)")
	flag.StringVar(&s.Tls.HttpsKey, "httpsKey", s.Tls.HttpsKey, "HTTPS key")
	flag.StringVar(&s.Tls.HttpsCert, "httpsCert", s.Tls.HttpsCert, "HTTPS chain")
}

func (s *Server) GetAddr() string {
	if s.Https {
		return s.Tls.Address
	}
	return s.Address
}
