package receivers

import (
	"encoding/json"

	lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message"
	mp "github.com/ClusterCockpit/cc-metric-collector/pkg/messageProcessor"
)

type defaultReceiverConfig struct {
	Type             string          `json:"type"`
	MessageProcessor json.RawMessage `json:"process_messages,omitempty"`
}

// Receiver configuration: Listen address, port
type ReceiverConfig struct {
	Addr         string `json:"address"`
	Port         string `json:"port"`
	Database     string `json:"database"`
	Organization string `json:"organization,omitempty"`
	Type         string `json:"type"`
}

type receiver struct {
	name string
	sink chan lp.CCMessage
	mp   mp.MessageProcessor
}

type Receiver interface {
	Start()
	Close()                         // Close / finish metric receiver
	Name() string                   // Name of the metric receiver
	SetSink(sink chan lp.CCMessage) // Set sink channel
}

// Name returns the name of the metric receiver
func (r *receiver) Name() string {
	return r.name
}

// SetSink set the sink channel
func (r *receiver) SetSink(sink chan lp.CCMessage) {
	r.sink = sink
}