package logger

import (
	"net/http"
)

// Option func type
type Option func(l *Middleware)

// Flags functional option defines output modes
func Flags(flags ...Flag) Option {
	return func(l *Middleware) {
		l.flags = flags
	}
}

// MaxBodySize functional option defines the largest body size to log.
func MaxBodySize(max int) Option {
	return func(l *Middleware) {
		if max >= 0 {
			l.maxBodySize = max
		}
	}
}

// Prefix functional option defines log line prefix.
func Prefix(prefix string) Option {
	return func(l *Middleware) {
		l.prefix = prefix
	}
}

// IPfn functional option defines ip masking function.
func IPfn(ipFn func(ip string) string) Option {
	return func(l *Middleware) {
		l.ipFn = ipFn
	}
}

// UserFn functional option defines user name function.
func UserFn(userFn func(r *http.Request) (string, error)) Option {
	return func(l *Middleware) {
		l.userFn = userFn
	}
}

// Log functional option defines loging backend.
func Log(log Backend) Option {
	return func(l *Middleware) {
		l.log = log
	}
}
