package limits

import (
	"github.com/openziti/zrok/controller/store"
	"time"
)

type Config struct {
	Environments   int
	Shares         int
	ReservedShares int
	UniqueNames    int
	ShareFrontends int
	Bandwidth      *BandwidthPerPeriod
	Cycle          time.Duration
	Enforcing      bool
}

type BandwidthPerPeriod struct {
	Period  time.Duration
	Warning *Bandwidth
	Limit   *Bandwidth
}

type Bandwidth struct {
	Rx    int64
	Tx    int64
	Total int64
}

func DefaultBandwidthPerPeriod() *BandwidthPerPeriod {
	return &BandwidthPerPeriod{
		Period: 24 * time.Hour,
		Warning: &Bandwidth{
			Rx:    store.Unlimited,
			Tx:    store.Unlimited,
			Total: store.Unlimited,
		},
		Limit: &Bandwidth{
			Rx:    store.Unlimited,
			Tx:    store.Unlimited,
			Total: store.Unlimited,
		},
	}
}

func DefaultConfig() *Config {
	return &Config{
		Environments:   store.Unlimited,
		Shares:         store.Unlimited,
		ReservedShares: store.Unlimited,
		UniqueNames:    store.Unlimited,
		ShareFrontends: store.Unlimited,
		Bandwidth:      DefaultBandwidthPerPeriod(),
		Enforcing:      false,
		Cycle:          15 * time.Minute,
	}
}