package models

import (
	"time"
)

// NotifierType 定义了通知器的类型。
type NotifierType string

const (
	// NotifierTypeSMTP 表示 SMTP 邮件通知器。
	NotifierTypeSMTP NotifierType = "邮件"
	// NotifierTypeWeChat 表示企业微信通知器。
	NotifierTypeWeChat NotifierType = "企业微信"
	// NotifierTypeLark 表示飞书通知器。
	NotifierTypeLark NotifierType = "飞书"
	// NotifierTypeLog 表示日志通知器，作为最终的告警记录渠道。
	NotifierTypeLog NotifierType = "日志"
)

// NotificationStatus 定义了通知发送尝试的状态枚举。
type NotificationStatus string

const (
	NotificationStatusSuccess NotificationStatus = "发送成功" // 通知已成功发送
	NotificationStatusFailed  NotificationStatus = "发送失败" // 通知发送失败
	NotificationStatusSkipped NotificationStatus = "已跳过"  // 通知因某些原因被跳过（例如：用户未配置联系方式）
)

// Notification 表示已发送或尝试发送的通知记录。
type Notification struct {
	Model

	// NotifierType 通知器类型 (例如："邮件", "企业微信", "飞书", "日志")
	NotifierType NotifierType `gorm:"type:varchar(20);not null;index" json:"notifier_type"`
	// UserID 接收通知的用户ID，用于追溯通知记录到特定用户
	UserID uint32 `gorm:"index" json:"user_id"` // 增加 UserID 字段，并添加索引
	// Title 通知标题
	Title string `gorm:"type:varchar(255);not null" json:"title"`
	// Message 通知内容
	Message string `gorm:"type:text;not null" json:"message"`
	// Level 通知级别 (例如：INFO, WARN, ERROR)
	Level SeverityLevel `gorm:"type:varchar(10);not null" json:"level"`
	// AlarmTimestamp 通知内容生成时的时间戳，与 ID 构成复合主键
	AlarmTimestamp time.Time `gorm:"primaryKey;not null" json:"alarm_timestamp"`
	// ToAddress 接收地址 (例如：邮箱地址, 企业微信ID, 日志标识符)
	ToAddress string `gorm:"type:varchar(255);not null" json:"to_address"`
	// Status 通知发送尝试的状态 (例如："待发送", "发送成功", "发送失败", "已跳过")
	Status NotificationStatus `gorm:"type:varchar(20);not null;default:'待发送'" json:"status"`
	// ErrorMessage 如果通知发送失败，此字段存储错误信息
	ErrorMessage string `gorm:"type:text" json:"error_message"`
}

// TableName 指定 Notification 模型的表名。
func (Notification) TableName() string {
	return "notifications"
}
