package models

import "time"

// =========================================
// NOTIFICATIONS (v0.20.0)
// =========================================

// Notification represents an in-app notification for a user.
// Notifications are immutable once created — only is_read can be toggled.
type Notification struct {
	ID           string    `json:"id" db:"id"`
	UserID       string    `json:"user_id" db:"user_id"`
	Type         string    `json:"type" db:"type"`                                  // domain.action, e.g. "role.fallback", "kb.ready"
	Title        string    `json:"title" db:"title"`                                // short summary shown in bell dropdown
	Body         string    `json:"body,omitempty" db:"body"`                        // optional detail text
	ResourceType string    `json:"resource_type,omitempty" db:"resource_type"`      // "channel", "knowledge_base", "project", etc.
	ResourceID   string    `json:"resource_id,omitempty" db:"resource_id"`          // navigable entity ID (no FK — resource may be deleted)
	IsRead       bool      `json:"is_read" db:"is_read"`
	CreatedAt    time.Time `json:"created_at" db:"created_at"`
}

// Notification type constants. Convention: domain.action.
// Free-form strings — new types don't require migration.
const (
	NotifTypeRoleFallback    = "role.fallback"
	NotifTypeKBReady         = "kb.ready"
	NotifTypeKBError         = "kb.error"
	NotifTypeGrantChanged    = "grant.changed"
	NotifTypeUserMentioned   = "user.mentioned"
	NotifTypeWorkflowAssign  = "workflow.assigned"
	NotifTypeWorkflowClaimed = "workflow.claimed"
	NotifTypeTaskCompleted   = "task.completed"
	NotifTypeTaskFailed      = "task.failed"
	NotifTypeTaskBudget      = "task.budget_exceeded"
	NotifTypeAnnouncement    = "system.announcement"
)

// Resource type constants for click-to-navigate.
// Note: ResourceTypeKnowledgeBase is already declared in models.go (resource_grants).
const (
	ResourceTypeChannel = "channel"
	ResourceTypeProject = "project"
	ResourceTypeTeam    = "team"
	ResourceTypeGroup   = "group"
)
