// Package notification owns the fan-out of alert events to operator-
// configured channels. Three channels in v1: webhook, ntfy, smtp.
// Each channel implements Channel.Send for one Payload at a time;
// the Hub orchestrates fan-out, persists to notification_log.
package notification

import "time"

// Event identifies the lifecycle hook this notification is for.
type Event string

const (
	// EventRaised occurs when an alert is first raised.
	EventRaised Event = "alert.raised"
	// EventAcknowledged occurs when an alert is acknowledged.
	EventAcknowledged Event = "alert.acknowledged"
	// EventResolved occurs when an alert is resolved.
	EventResolved Event = "alert.resolved"
	// EventTest is used for test notifications.
	EventTest Event = "alert.test"
)

// Payload is the per-event blob every channel renders into its own
// shape. Severity maps to channel-specific priority (ntfy) or stays
// in the body (webhook/smtp).
type Payload struct {
	Event    Event  // alert.raised | … | alert.test
	AlertID  string // ULID
	Severity string // info | warning | critical
	Kind     string // backup_failed | …
	HostID   string
	HostName string
	Message  string
	RaisedAt time.Time
	Link     string // Absolute URL to /alerts/<id>; built by Hub
}
