package userbehavior

import (
	"time"
)

type GTMSentEmail struct {
	ID                 uint64    `gorm:"primarykey"`
	CreatedAt          time.Time `gorm:"created_at;type:TIMESTAMP;not null;<-:create"`
	LeadID             uint64    `gorm:"not null;index:idx_gtm_sent_email_lead;constraint:OnDelete:CASCADE"`
	TenantID           uint64    `gorm:"not null;index:idx_gtm_sent_email_tenant"`
	ToAddress          string    `gorm:"size:255;not null"`
	Subject            string    `gorm:"type:text;not null"`
	Body               string    `gorm:"type:text;not null"`
	CCAddresses        *string   `gorm:"size:1000"`
	UseCaseProfile     string    `gorm:"size:100;not null"`
	CustomerReferences *string   `gorm:"type:text"`

	// Queueing / delivery tracking
	ScheduledAt   time.Time  `gorm:"column:scheduled_at;type:TIMESTAMP;not null;default:CURRENT_TIMESTAMP;index:idx_gtm_sent_email_status_scheduled,priority:2"`
	SentAt        *time.Time `gorm:"column:sent_at;type:TIMESTAMP"`
	Status        string     `gorm:"size:50;not null;default:'queued';index:idx_gtm_sent_email_status_scheduled,priority:1"`
	AttemptCount  uint32     `gorm:"column:attempt_count;not null;default:0"`
	LastAttemptAt *time.Time `gorm:"column:last_attempt_at;type:TIMESTAMP"`

	MessageID    *string `gorm:"size:255;uniqueIndex:idx_gtm_sent_email_msg_id"`
	ErrorMessage *string `gorm:"type:text"`
}

func (GTMSentEmail) TableName() string {
	return "gtm_sent_emails"
}
