package proxy

import (
	"time"

	"forge.cadoles.com/cadoles/bouncer/internal/config"
	"forge.cadoles.com/cadoles/bouncer/internal/proxy/director"
)

type Option struct {
	ServerConfig     config.ProxyServerConfig
	RedisConfig      config.RedisConfig
	DirectorLayers   []director.Layer
	DirectorCacheTTL time.Duration
}

type OptionFunc func(*Option)

func defaultOption() *Option {
	return &Option{
		ServerConfig:     config.NewDefaultProxyServerConfig(),
		RedisConfig:      config.NewDefaultRedisConfig(),
		DirectorLayers:   make([]director.Layer, 0),
		DirectorCacheTTL: 30 * time.Second,
	}
}

func WithServerConfig(conf config.ProxyServerConfig) OptionFunc {
	return func(opt *Option) {
		opt.ServerConfig = conf
	}
}

func WithRedisConfig(conf config.RedisConfig) OptionFunc {
	return func(opt *Option) {
		opt.RedisConfig = conf
	}
}

func WithDirectorLayers(layers ...director.Layer) OptionFunc {
	return func(opt *Option) {
		opt.DirectorLayers = layers
	}
}

func WithDirectorCacheTTL(ttl time.Duration) OptionFunc {
	return func(opt *Option) {
		opt.DirectorCacheTTL = ttl
	}
}