package models

import (
	"time"
)

// OnboardingEmailType represents the type of onboarding email
type OnboardingEmailType string

const (
	// OnboardingEmailNoResidence is sent when a user has not created a residence after 2 days
	OnboardingEmailNoResidence OnboardingEmailType = "no_residence"
	// OnboardingEmailNoTasks is sent when a user has created a residence but no tasks after 5 days
	OnboardingEmailNoTasks OnboardingEmailType = "no_tasks"
)

// OnboardingEmail tracks sent onboarding emails per user
// Each email type can only be sent once per user (enforced by unique constraint on user_id + email_type)
type OnboardingEmail struct {
	ID         uint                `gorm:"primaryKey" json:"id"`
	UserID     uint                `gorm:"not null;index" json:"user_id"`
	User       User                `gorm:"foreignKey:UserID" json:"user,omitempty"`
	EmailType  OnboardingEmailType `gorm:"type:varchar(50);not null;index" json:"email_type"`
	SentAt     time.Time           `gorm:"not null" json:"sent_at"`
	OpenedAt   *time.Time          `json:"opened_at"`
	TrackingID string              `gorm:"type:varchar(64);uniqueIndex" json:"tracking_id"`
	CreatedAt  time.Time           `json:"created_at"`
	UpdatedAt  time.Time           `json:"updated_at"`
}

// TableName returns the table name for OnboardingEmail
func (OnboardingEmail) TableName() string {
	return "onboarding_emails"
}
