package fstree

import (
	"io/fs"

	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger"
	utilSync "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/sync"
	"go.uber.org/zap"
)

type Option func(*FSTree)

func WithDepth(d uint64) Option {
	return func(f *FSTree) {
		f.Depth = d
	}
}

func WithDirNameLen(l int) Option {
	return func(f *FSTree) {
		f.DirNameLen = l
	}
}

func WithPerm(p fs.FileMode) Option {
	return func(f *FSTree) {
		f.Permissions = p
	}
}

func WithPath(p string) Option {
	return func(f *FSTree) {
		f.RootPath = p
	}
}

func WithNoSync(noSync bool) Option {
	return func(f *FSTree) {
		f.noSync = noSync
	}
}

func WithMetrics(m Metrics) Option {
	return func(f *FSTree) {
		f.metrics = m
	}
}

func WithFileCounter(c FileCounter) Option {
	return func(f *FSTree) {
		f.fileCounterEnabled = true
		f.fileCounter = c
		f.fileGuard = utilSync.NewKeyLocker[string]()
	}
}

func WithLogger(l *logger.Logger) Option {
	return func(f *FSTree) {
		f.log = &logger.Logger{Logger: l.With(zap.String("component", "FSTree"))}
	}
}