package conf

import "sync"

type Config struct {
	Name             string
	Hostname         string
	PSKPath          string
	PublicKeyPath    string
	PrivateKeyPath   string
	NodeEndpointPort int64
	IndexerAddresses string

	NanoIDS string
	PeerIDS string // TO REMOVE

	NodeMode string

	MinIndexer int
	MaxIndexer int
	// SearchTimeout is the max duration without a new result before the
	// distributed peer search stream is closed. Default: 5s.
	SearchTimeout int // seconds; 0 → use default (5)

	// Indexer connection burst guard: max new connections accepted within the window.
	// 0 → use defaults (20 new peers per 30s).
	MaxConnPerWindow int // default 20
	ConnWindowSecs   int // default 30

	// Per-node behavioral limits (sliding 60s window). 0 → use built-in defaults.
	MaxHBPerMinute      int // default 5
	MaxPublishPerMinute int // default 10
	MaxGetPerMinute     int // default 50

	// LocationGranularity controls how precisely this node discloses its position.
	//   0 = opt-out (no location published)
	//   1 = continent  (±15°)
	//   2 = country    (±3°)  — default
	//   3 = region     (±0.5°)
	//   4 = city       (±0.05°)
	LocationGranularity int // default 2
}

var instance *Config
var once sync.Once

func GetConfig() *Config {
	once.Do(func() {
		instance = &Config{}
	})
	return instance
}
