package receiver

import (
	"github.com/tidbcloud/jiraport/pkg/entity"

	"github.com/spf13/viper"
)

type StaticReceiver struct {
	StaticType    string `mapstructure:"type"`
	StaticID      string `mapstructure:"id"`
	StaticName    string `mapstructure:"name"`
	StaticBotType string `mapstructure:"botType"`
}

// impl Receiver
func (sr *StaticReceiver) Type() string {
	return sr.StaticType
}

// impl Receiver
func (sr *StaticReceiver) ID() string {
	return sr.StaticID
}

// impl Receiver
func (sr *StaticReceiver) Show() string {
	return sr.StaticName
}

// impl Receiver
func (sr *StaticReceiver) BotType() string {
	return sr.StaticBotType
}

type StaticReceiverSelector struct {
	staticReceivers map[string]StaticReceiver
}

func NewStaticReceiverSelector() (*StaticReceiverSelector, error) {
	var staticReceivers map[string]StaticReceiver
	err := viper.UnmarshalKey("receivers", &staticReceivers)
	if err != nil {
		return nil, err
	}
	return &StaticReceiverSelector{staticReceivers: staticReceivers}, nil
}

// impl ReceiverSelector
func (rs *StaticReceiverSelector) SelectReceiver(name string, data *entity.Issue) ([]Receiver, error) {
	receivers := make([]Receiver, 0)
	if receiver, ok := rs.staticReceivers[name]; ok {
		receivers = append(receivers, &receiver)
	}
	return receivers, nil
}
