package api

import (
	"context"

	msgent "github.com/tidbcloud/devops/entity/message"
)

type SendEmailParam struct {
	Name        string
	Target      msgent.EmailTarget
	Template    msgent.EmailTemplate
	Reason      string
	Applicant   string
	FromAddress string
	CCAdresses  []string
	BCCAdresses []string
}

type SendBulkEmailsParam struct {
	Name        string
	Targets     []msgent.EmailTarget
	Template    msgent.EmailTemplate
	Reason      string
	Applicant   string
	FromAddress string
}

type ListEmailRecordsParam struct {
	ReasonLike    *string
	FromAddressIs *string
	NameIs        *string

	Page    int
	PerPage int
}

type EmailServiceAPI interface {
	// SendEmail sends and records one email containing all resolved To recipients.
	// To recipients can see one another because they receive the same email.
	SendEmail(ctx context.Context, param SendEmailParam) error
	// SendBulkEmails records the bulk action and sends a separate email to each resolved To recipient.
	// To recipients cannot see one another because each recipient receives an independent email.
	// It returns an error only when target resolution or validation fails before sending starts.
	// Once sending starts, unsuccessful targets are returned as failed targets instead.
	SendBulkEmails(ctx context.Context, param SendBulkEmailsParam) (
		successTargets, failedTargets []msgent.EmailTarget,
		err error,
	)
	ListEmailRecords(ctx context.Context, param ListEmailRecordsParam) ([]*msgent.EmailRecord, int64, error)
	GetEmailRecord(ctx context.Context, id uint64) (*msgent.EmailRecord, error)
}
