package limits

import "time"

const Unlimited = -1

type Config struct {
	Environments int
	Shares       int
	Bandwidth    *BandwidthConfig
	Cycle        time.Duration
	Enforcing    bool
}

type BandwidthConfig struct {
	PerAccount     *BandwidthPerPeriod
	PerEnvironment *BandwidthPerPeriod
	PerShare       *BandwidthPerPeriod
}

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:    Unlimited,
			Tx:    Unlimited,
			Total: Unlimited,
		},
		Limit: &Bandwidth{
			Rx:    Unlimited,
			Tx:    Unlimited,
			Total: Unlimited,
		},
	}
}

func DefaultConfig() *Config {
	return &Config{
		Environments: Unlimited,
		Shares:       Unlimited,
		Bandwidth: &BandwidthConfig{
			PerAccount:     DefaultBandwidthPerPeriod(),
			PerEnvironment: DefaultBandwidthPerPeriod(),
			PerShare:       DefaultBandwidthPerPeriod(),
		},
		Enforcing: false,
		Cycle:     15 * time.Minute,
	}
}
