package framework

const InputProviderMockV1IdStr InputProviderType = "InputProviderMockV1"

var InputProviderMockV1Meta = InputProviderMeta{
	Type:             InputProviderMockV1IdStr,
	InterfaceVersion: InputInterfaceV1IdStr,
}

type InputProviderMockConfigV1 struct {
	Step uint `yaml:"step"`
}

func (this *InputProviderMockConfigV1) FillBlankValuesFrom(another ConfigData) ConfigData {
	if this.Step != 0 {
		return this
	}
	return &InputProviderMockConfigV1{
		Step: another.(*InputProviderMockConfigV1).Step,
	}
}

func (this *InputProviderMockConfigV1) UniqStr() string {
	return ""
}

type InputProviderMockV1 struct {
	eventReceiver EventReceiver
}

func NewInputProviderMockV1(
	eventReceiver EventReceiver,
	_ *InputProviderMockConfigV1) *InputProviderMockV1 {

	return &InputProviderMockV1{
		eventReceiver: eventReceiver,
	}
}

func (this *InputProviderMockV1) GetRangeMetrics(
	clusterId ClusterId,
	name MetricName,
	fromTo TimeRange) (MetricTimeValueInt64s, error) {

	this.eventReceiver.OnEvent(
		EventInputV1GetRangeMetrics,
		EventDataWithName("ClusterId", CloneableString(clusterId)),
		EventDataWithName("FromTo", CloneableString(fromTo.String())))
	return nil, nil
}

func (this *InputProviderMockV1) GetClusterTopology(clusterId ClusterId) (ClusterTopologyV1, error) {
	this.eventReceiver.OnEvent(
		EventInputV1GetTopology,
		EventDataWithName("ClusterId", CloneableString(clusterId)))
	return ClusterTopologyV1Mock, nil
}
