package store

import (
	"context"
	"time"

	"go.chromium.org/luci/common/tsmon/types"
)

// NewNilStore creates a metric store that completely ignores all metrics.
//
// It's setters are noop, and getters return nil.
func NewNilStore() Store {
	return nilStore{}
}

// IsNilStore returns true if given Store is in fact nil-store.
func IsNilStore(s Store) bool {
	_, yep := s.(nilStore)
	return yep
}

type nilStore struct{}

func (nilStore) DefaultTarget() types.Target     { return nil }
func (nilStore) SetDefaultTarget(t types.Target) {}

func (nilStore) Get(ctx context.Context, m types.Metric, resetTime time.Time, fieldVals []interface{}) interface{} {
	return nil
}

func (nilStore) Set(ctx context.Context, m types.Metric, resetTime time.Time, fieldVals []interface{}, value interface{}) {
}

func (nilStore) Del(ctx context.Context, m types.Metric, fieldVals []interface{}) {
}

func (nilStore) Incr(ctx context.Context, m types.Metric, resetTime time.Time, fieldVals []interface{}, delta interface{}) {
}

func (nilStore) GetAll(ctx context.Context) []types.Cell {
	return nil
}

func (nilStore) Reset(ctx context.Context, m types.Metric) {
}
