package writecache

import (
	"time"

	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode"
)

type StorageType string

func (t StorageType) String() string {
	return string(t)
}

const (
	StorageTypeUndefined StorageType = "null"
	StorageTypeDB        StorageType = "db"
	StorageTypeFSTree    StorageType = "fstree"
)

type Metrics interface {
	SetShardID(string)
	Get(d time.Duration, success bool, st StorageType)
	Delete(d time.Duration, success bool, st StorageType)
	Put(d time.Duration, success bool, st StorageType)
	Flush(success bool, st StorageType)
	Evict(st StorageType)

	SetEstimateSize(uint64)
	SetMode(m mode.ComponentMode)
	SetActualCounters(uint64)
	SetPath(path string)
	Close()
}

func DefaultMetrics() Metrics { return metricsStub{} }

type metricsStub struct{}

func (metricsStub) SetShardID(string) {}

func (metricsStub) SetPath(string) {}

func (metricsStub) Get(time.Duration, bool, StorageType) {}

func (metricsStub) Delete(time.Duration, bool, StorageType) {}

func (metricsStub) Put(time.Duration, bool, StorageType) {}

func (metricsStub) SetEstimateSize(uint64) {}

func (metricsStub) SetMode(mode.ComponentMode) {}

func (metricsStub) SetActualCounters(uint64) {}

func (metricsStub) Flush(bool, StorageType) {}

func (metricsStub) Evict(StorageType) {}

func (metricsStub) Close() {}