package model

// Enums defines string constants for all GoChat model enum fields.
// Pattern: Go string constants instead of Rails integer flags.
// Reference: Chatwoot uses integer enums; GoChat uses descriptive strings.

// --- Inbox Channel Types (M2) ---
type InboxChannelType string

const (
	InboxChannelTypeWebWidget  InboxChannelType = "Channel::WebWidget"
	InboxChannelTypeTelegram   InboxChannelType = "Channel::Telegram"
	InboxChannelTypeFacebook   InboxChannelType = "Channel::FacebookPage"
	InboxChannelTypeWhatsapp   InboxChannelType = "Channel::Whatsapp"
	InboxChannelTypeEmail      InboxChannelType = "Channel::Email"
	InboxChannelTypeAPI        InboxChannelType = "Channel::Api"
	InboxChannelTypeTwilioSMS  InboxChannelType = "Channel::TwilioSms"
	InboxChannelTypeLine       InboxChannelType = "Channel::Line"
	InboxChannelTypeSms        InboxChannelType = "Channel::Sms"
	InboxChannelTypeInstagram  InboxChannelType = "Channel::Instagram"
	InboxChannelTypeTiktok     InboxChannelType = "Channel::Tiktok"
)

// --- Conversation Status (M3) ---
type ConversationStatus string

const (
	ConversationStatusOpen     ConversationStatus = "open"
	ConversationStatusResolved ConversationStatus = "resolved"
	ConversationStatusPending  ConversationStatus = "pending"
	ConversationStatusSnoozed  ConversationStatus = "snoozed"
)

// --- Conversation Priority (M3) ---
type ConversationPriority string

const (
	ConversationPriorityUrgent ConversationPriority = "urgent"
	ConversationPriorityHigh   ConversationPriority = "high"
	ConversationPriorityMedium ConversationPriority = "medium"
	ConversationPriorityLow    ConversationPriority = "low"
)

// --- Message Content Types (M3) ---
type MessageContentType string

const (
	MessageContentTypeText       MessageContentType = "text"
	MessageContentTypeInputText  MessageContentType = "input_text"
	MessageContentTypeInputEmail MessageContentType = "input_email"
	MessageContentTypeImage      MessageContentType = "image"
	MessageContentTypeAudio      MessageContentType = "audio"
	MessageContentTypeVideo      MessageContentType = "video"
	MessageContentTypeFile       MessageContentType = "file"
	MessageContentTypeLocation   MessageContentType = "location"
	MessageContentTypeEmoji      MessageContentType = "emoji"
	MessageContentTypeExtended   MessageContentType = "extended"
	MessageContentTypeQuote      MessageContentType = "quote"
	MessageContentTypeContact    MessageContentType = "contact"
)

// --- Message Types (M3) ---
type MessageType string

const (
	MessageTypeIncoming  MessageType = "incoming"
	MessageTypeOutgoing  MessageType = "outgoing"
	MessageTypeActivity  MessageType = "activity"
	MessageTypeTemplate  MessageType = "template"
	MessageTypePrivate   MessageType = "private"
)

// --- Message Sender Types (M3) ---
type SenderType string

const (
	SenderTypeContact  SenderType = "Contact"
	SenderTypeUser     SenderType = "User"
	SenderTypeAgentBot SenderType = "AgentBot"
)

// --- Message Status (M3) ---
type MessageStatus string

const (
	MessageStatusSent     MessageStatus = "sent"
	MessageStatusDelivered MessageStatus = "delivered"
	MessageStatusRead     MessageStatus = "read"
	MessageStatusFailed   MessageStatus = "failed"
)

// --- Attachment File Types (M3) ---
type AttachmentFileType string

const (
	AttachmentFileTypeImage    AttachmentFileType = "image"
	AttachmentFileTypeAudio    AttachmentFileType = "audio"
	AttachmentFileTypeVideo    AttachmentFileType = "video"
	AttachmentFileTypeFile     AttachmentFileType = "file"
	AttachmentFileTypeLocation AttachmentFileType = "location"
	AttachmentFileTypeEmoji    AttachmentFileType = "emoji"
	AttachmentFileTypeContact  AttachmentFileType = "contact"
)

// --- AccountUser Roles (M1) ---
type AccountUserRole string

const (
	AccountUserRoleAgent      AccountUserRole = "agent"
	AccountUserRoleAdmin      AccountUserRole = "administrator"
	AccountUserRoleSupervisor AccountUserRole = "supervisor"
)

// --- User Availability (M1) ---
type UserAvailability string

const (
	UserAvailabilityOnline  UserAvailability = "online"
	UserAvailabilityOffline UserAvailability = "offline"
	UserAvailabilityBusy    UserAvailability = "busy"
)

// --- Contact Type (M4) ---
type ContactType string

const (
	ContactTypeContact   ContactType = "contact"
	ContactTypeMyContact ContactType = "my_contact"
)

// --- Automation Rule Event Types (M6) ---
type AutomationEventType string

const (
	AutomationEventTypeConversationCreated AutomationEventType = "conversation_created"
	AutomationEventTypeConversationUpdated AutomationEventType = "conversation_updated"
	AutomationEventTypeMessageCreated     AutomationEventType = "message_created"
)

// --- Automation Action Types (M6) ---
type AutomationActionType string

const (
	AutomationActionTypeSendMessage   AutomationActionType = "send_message"
	AutomationActionTypeUpdateStatus  AutomationActionType = "update_status"
	AutomationActionTypeAssignAgent   AutomationActionType = "assign_agent"
	AutomationActionTypeAssignTeam    AutomationActionType = "assign_team"
	AutomationActionTypeAddLabel      AutomationActionType = "add_label"
	AutomationActionTypeWebhook       AutomationActionType = "webhook"
)

// --- Report Types (M7) ---
type ReportType string

const (
	ReportTypeConversation ReportType = "conversation"
	ReportTypeAgent        ReportType = "agent"
	ReportTypeInbox        ReportType = "inbox"
	ReportTypeTeam         ReportType = "team"
)

// --- Notification Types (M8) ---
type NotificationType string

const (
	NotificationTypeConversationCreated            NotificationType = "conversation_created"
	NotificationTypeConversationAssigned           NotificationType = "conversation_assigned"
	NotificationTypeMessageCreated                 NotificationType = "message_created"
	NotificationTypeAssignedConversationNewMessage NotificationType = "assigned_conversation_new_message"
)

// --- Article Status (M9) ---
type ArticleStatus string

const (
	ArticleStatusDraft     ArticleStatus = "draft"
	ArticleStatusPublished ArticleStatus = "published"
	ArticleStatusArchived  ArticleStatus = "archived"
)

// --- Portal Member Roles (M9) ---
type PortalMemberRole string

const (
	PortalMemberRoleReader        PortalMemberRole = "reader"
	PortalMemberRoleEditor        PortalMemberRole = "editor"
	PortalMemberRoleAdministrator PortalMemberRole = "administrator"
)

// --- SLA Event Types (M11) ---
type SlaEventType string

const (
	SlaEventTypeFirstResponseMissed SlaEventType = "first_response_missed"
	SlaEventTypeNextResponseMissed  SlaEventType = "next_response_missed"
	SlaEventTypeResolutionMissed    SlaEventType = "resolution_missed"
	SlaEventTypeFirstResponseMet    SlaEventType = "first_response_met"
	SlaEventTypeNextResponseMet     SlaEventType = "next_response_met"
	SlaEventTypeResolutionMet       SlaEventType = "resolution_met"
)

// --- Call Status (M11) ---
type CallStatus string

const (
	CallStatusRinging  CallStatus = "ringing"
	CallStatusOngoing  CallStatus = "ongoing"
	CallStatusCompleted CallStatus = "completed"
	CallStatusFailed   CallStatus = "failed"
	CallStatusMissed   CallStatus = "missed"
)

// --- Call Direction (M11) ---
type CallDirection string

const (
	CallDirectionInbound  CallDirection = "inbound"
	CallDirectionOutbound CallDirection = "outbound"
)

// --- Data Import Source Types (M12) ---
type DataImportSourceType string

const (
	DataImportSourceCSV     DataImportSourceType = "csv"
	DataImportSourceChatwoot DataImportSourceType = "chatwoot"
	DataImportSourceZendesk DataImportSourceType = "zendesk"
	DataImportSourceFreshdesk DataImportSourceType = "freshdesk"
)

// --- Data Import Status (M12) ---
type DataImportStatus string

const (
	DataImportStatusPending    DataImportStatus = "pending"
	DataImportStatusProcessing DataImportStatus = "processing"
	DataImportStatusCompleted  DataImportStatus = "completed"
	DataImportStatusFailed     DataImportStatus = "failed"
)

// --- Captain AI Response Status (M10) ---
type CaptainResponseStatus string

const (
	CaptainResponseStatusSuggested CaptainResponseStatus = "suggested"
	CaptainResponseStatusDismissed CaptainResponseStatus = "dismissed"
	CaptainResponseStatusAccepted  CaptainResponseStatus = "accepted"
)

// --- Captain Document Status (M10) ---
type CaptainDocumentStatus string

const (
	CaptainDocumentStatusProcessing CaptainDocumentStatus = "processing"
	CaptainDocumentStatusReady      CaptainDocumentStatus = "ready"
	CaptainDocumentStatusError      CaptainDocumentStatus = "error"
)

// --- Copilot Message Roles (M10) ---
type CopilotMessageRole string

const (
	CopilotMessageRoleUser      CopilotMessageRole = "user"
	CopilotMessageRoleAssistant CopilotMessageRole = "assistant"
	CopilotMessageRoleSystem    CopilotMessageRole = "system"
)

// --- Audit Actions (M11) ---
type AuditAction string

const (
	AuditActionCreate    AuditAction = "create"
	AuditActionUpdate    AuditAction = "update"
	AuditActionDelete    AuditAction = "delete"
	AuditActionAssign    AuditAction = "assign"
	AuditActionUnassign  AuditAction = "unassign"
)

// --- Push Token Platforms (M8) ---
type PushTokenPlatform string

const (
	PushTokenPlatformIOS PushTokenPlatform = "ios"
	PushTokenPlatformAndroid PushTokenPlatform = "android"
	PushTokenPlatformWeb  PushTokenPlatform = "web"
)

// --- Notification Channels (M8) ---
type NotificationChannel string

const (
	NotificationChannelEmail  NotificationChannel = "email"
	NotificationChannelPush   NotificationChannel = "push"
	NotificationChannelBrowser NotificationChannel = "browser"
)

// --- Banner Types (M12) ---
type BannerType string

const (
	BannerTypeInfo     BannerType = "info"
	BannerTypeWarning  BannerType = "warning"
	BannerTypeCritical BannerType = "critical"
)

// --- Dashboard App Kinds (M12) ---
type DashboardAppKind string

const (
	DashboardAppKindIframe DashboardAppKind = "iframe"
	DashboardAppKindLink   DashboardAppKind = "link"
)