package port

import (
	"context"

	"github.com/orchard9/rdev/internal/domain"
)

// NotifyProvisioner manages per-project email delivery on the notify service.
// Each project gets its own isolated sending host (mail.{slug}.threesix.ai),
// Resend domain with DKIM/SPF, and a dedicated notify account with send key.
type NotifyProvisioner interface {
	// CreateProjectNotify provisions a notify host, Resend domain, DNS records,
	// and account with send key for the project.
	CreateProjectNotify(ctx context.Context, projectID, slug string) (*domain.NotifyCredentials, error)

	// DeleteProjectNotify removes all notify resources for a project:
	// the notify account, the per-project host, the Resend domain, and DNS records.
	DeleteProjectNotify(ctx context.Context, projectID, slug, resendDomainID string) error

	// GetProjectNotify returns notify credentials for a project, or nil if not provisioned.
	GetProjectNotify(ctx context.Context, projectID string) (*domain.NotifyCredentials, error)

	// TestConnection verifies the admin API key and notify service are reachable.
	TestConnection(ctx context.Context) error
}
