/**
 * Attachment type enum for database message extras
 */
export enum AttachmentType {
	AUDIO = 'AUDIO',
	IMAGE = 'IMAGE',
	VIDEO = 'VIDEO',
	MCP_PROMPT = 'MCP_PROMPT',
	MCP_RESOURCE = 'MCP_RESOURCE',
	PDF = 'PDF',
	TEXT = 'TEXT',
	LEGACY_CONTEXT = 'context' // Legacy attachment type for backward compatibility
}

/**
 * Unique identifiers for attachment menu items in the chat form action dropdowns.
 * Used to select which file upload or attachment action is triggered.
 */
export enum AttachmentMenuItemId {
	IMAGES = 'images',
	AUDIO = 'audio',
	VIDEO = 'video',
	TEXT = 'text',
	PDF = 'pdf',
	SYSTEM_MESSAGE = 'system-message',
	MCP_PROMPT = 'mcp-prompt',
	MCP_RESOURCES = 'mcp-resources'
}

/**
 * Defines when an attachment menu item should be enabled.
 */
export enum AttachmentItemEnabledWhen {
	ALWAYS = 'always',
	HAS_VISION_MODALITY = 'hasVisionModality',
	HAS_AUDIO_MODALITY = 'hasAudioModality',
	HAS_VIDEO_MODALITY = 'hasVideoModality'
}

/**
 * Defines the callback action triggered when an attachment menu item is clicked.
 */
export enum AttachmentAction {
	FILE_UPLOAD = 'onFileUpload',
	SYSTEM_PROMPT_CLICK = 'onSystemPromptClick',
	MCP_PROMPT_CLICK = 'onMcpPromptClick',
	MCP_RESOURCES_CLICK = 'onMcpResourcesClick'
}

/**
 * Human-readable labels used when embedding attachments in outgoing messages.
 */
export enum AttachmentLabel {
	FILE = 'File',
	PDF_FILE = 'PDF File',
	MCP_PROMPT = 'MCP Prompt',
	MCP_RESOURCE = 'MCP Resource'
}

/**
 * Visibility conditions for attachment menu items.
 */
export enum AttachmentItemVisibleWhen {
	HAS_MCP_PROMPTS_SUPPORT = 'hasMcpPromptsSupport',
	HAS_MCP_RESOURCES_SUPPORT = 'hasMcpResourcesSupport'
}
