package receiver

import (
	eng "jiraport/resolver/engineer"
	"jiraport/service/jira"

	"gorm.io/gorm"
)

type AssigneeReceiverSelector struct {
	db *gorm.DB
}

func NewAssigneeReceiverSelector(db *gorm.DB) (*AssigneeReceiverSelector, error) {
	return &AssigneeReceiverSelector{db: db}, nil
}

func (rs *AssigneeReceiverSelector) SelectReceiver(name string, data interface{}) ([]Receiver, error) {
	if name != "assignee" {
		return nil, nil
	}
	receivers := make([]Receiver, 0)
	if issue, ok := data.(*jira.Issue); ok {
		assigneeEmail := issue.AssigneeEmail
		if assigneeEmail == "" {
			return nil, &NoAssigneeError{s: "no assignee as receiver"}
		}
		assignee, err := eng.GetEngineerByEmail(rs.db, assigneeEmail)
		if err != nil {
			return nil, err
		}
		if assignee != nil {
			receivers = append(receivers, assignee)
		}
	}
	return receivers, nil
}
