export type Role = 'user' | 'assistant'; // 附件类型枚举 export type AttachmentType = 'image' | 'video' | 'file'; // 附件数据结构 export type MessageAttachment = { id: string; type: AttachmentType; url: string; localUri?: string; // 本地URI,用于上传中的显示 filename?: string; size?: number; duration?: number; // 视频时长(秒) thumbnail?: string; // 视频缩略图 width?: number; height?: number; uploadProgress?: number; // 上传进度 0-1 uploadError?: string; // 上传错误信息 }; // AI选择选项数据结构 export type AiChoiceOption = { id: string; label: string; value: any; recommended?: boolean; emoji?: string; }; // AI响应数据结构 export type AiResponseData = { content: string; choices?: AiChoiceOption[]; interactionType?: 'text' | 'food_confirmation' | 'selection'; pendingData?: any; context?: any; }; // 重构后的消息数据结构 export type ChatMessage = { id: string; role: Role; content: string; // 文本内容 attachments?: MessageAttachment[]; // 附件列表 choices?: AiChoiceOption[]; // 选择选项(仅用于assistant消息) interactionType?: string; // 交互类型 pendingData?: any; // 待确认数据 context?: any; // 上下文信息 }; // 卡片类型常量定义 export const CardType = { WEIGHT_INPUT: '__WEIGHT_INPUT_CARD__', DIET_INPUT: '__DIET_INPUT_CARD__', DIET_TEXT_INPUT: '__DIET_TEXT_INPUT__', DIET_PLAN: '__DIET_PLAN_CARD__', } as const; export type CardType = typeof CardType[keyof typeof CardType]; // 定义路由参数类型 export type CoachScreenParams = { name?: string; action?: 'diet' | 'weight' | 'mood' | 'workout'; subAction?: 'record' | 'photo' | 'text' | 'card'; meal?: 'breakfast' | 'lunch' | 'dinner' | 'snack'; message?: string; }; // 快捷操作按钮类型 export type QuickChip = { key: string; label: string; action: () => void; }; // 选中的图片类型 export type SelectedImage = { id: string; localUri: string; width?: number; height?: number; progress: number; uploadedKey?: string; uploadedUrl?: string; error?: string; };