package admin

import (
	"forge.cadoles.com/cadoles/bouncer/internal/config"
	"forge.cadoles.com/cadoles/bouncer/internal/integration"
)

type Option struct {
	BootstrapConfig config.BootstrapConfig
	ServerConfig    config.AdminServerConfig
	RedisConfig     config.RedisConfig
	Integrations    []integration.Integration
}

type OptionFunc func(*Option)

func defaultOption() *Option {
	return &Option{
		ServerConfig: config.NewDefaultAdminServerConfig(),
		RedisConfig:  config.NewDefaultRedisConfig(),
		Integrations: make([]integration.Integration, 0),
	}
}

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

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

func WithBootstrapConfig(conf config.BootstrapConfig) OptionFunc {
	return func(opt *Option) {
		opt.BootstrapConfig = conf
	}
}

func WithIntegrations(integrations ...integration.Integration) OptionFunc {
	return func(opt *Option) {
		opt.Integrations = integrations
	}
}