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 {
	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(db, fstree uint64)
	SetMode(m mode.Mode)
	SetActualCounters(db, fstree uint64)
	Close()
}

func DefaultMetrics() Metrics { return metricsStub{} }

type metricsStub struct{}

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, uint64) {}

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

func (metricsStub) SetActualCounters(uint64, uint64) {}

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

func (metricsStub) Evict(StorageType) {}

func (metricsStub) Close() {}