package metabaseconfig

import (
	"io/fs"

	"github.com/nspcc-dev/neofs-node/cmd/neofs-node/config"
)

// Config is a wrapper over the config section
// which provides access to Metabase configurations.
type Config config.Config

// config defaults
const (
	// PermDefault is a default permission bits for metabase file.
	PermDefault = 0660
)

// From wraps config section into Config.
func From(c *config.Config) *Config {
	return (*Config)(c)
}

// Path returns value of "path" config parameter.
//
// Panics if value is not a non-empty string.
func (x *Config) Path() string {
	p := config.String(
		(*config.Config)(x),
		"path",
	)

	if p == "" {
		panic("metabase path not set")
	}

	return p
}

// Perm returns value of "perm" config parameter as a fs.FileMode.
//
// Returns PermDefault if value is not a positive number.
func (x *Config) Perm() fs.FileMode {
	p := config.UintSafe(
		(*config.Config)(x),
		"perm",
	)

	if p == 0 {
		p = PermDefault
	}

	return fs.FileMode(p)
}