// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of K9s

package health

import (
	"github.com/derailed/k9s/internal/client"
	"k8s.io/apimachinery/pkg/runtime"
	"k8s.io/apimachinery/pkg/runtime/schema"
)

// Check tracks resource health.
type Check struct {
	Counts

	GVR *client.GVR
}

// Checks represents a collection of health checks.
type Checks []*Check

// NewCheck returns a new health check.
func NewCheck(gvr *client.GVR) *Check {
	return &Check{
		GVR:    gvr,
		Counts: make(Counts),
	}
}

// Set sets a health metric.
func (c *Check) Set(l Level, v int64) {
	c.Counts[l] = v
}

// Inc increments a health metric.
func (c *Check) Inc(l Level) {
	c.Counts[l]++
}

// Total stores a metric total.
func (c *Check) Total(n int64) {
	c.Counts[Corpus] = n
}

// Tally retrieves a given health metric.
func (c *Check) Tally(l Level) int64 {
	return c.Counts[l]
}

// GetObjectKind returns a schema object.
func (Check) GetObjectKind() schema.ObjectKind {
	return nil
}

// DeepCopyObject returns a container copy.
func (c Check) DeepCopyObject() runtime.Object {
	return c
}
