import dayjs from 'dayjs'; // 用户配置文件类型 type UserProfile = { name?: string; weight?: number; height?: number; pilatesPurposes?: string[]; }; // 选择选项类型 export type WelcomeChoice = { id: string; label: string; value: string; emoji: string; recommended?: boolean; }; // 欢迎消息数据结构 export type WelcomeMessageData = { content: string; choices: WelcomeChoice[]; interactionType: 'selection'; }; // 参数类型 type GenerateWelcomeMessageParams = { userProfile?: UserProfile; hasRecordedMoodToday?: boolean; }; /** * 生成个性化欢迎消息 * @param params 参数对象,包含用户配置和今日是否已记录心情 * @returns 个性化欢迎消息数据,包含内容和选择选项 */ export function generateWelcomeMessage(params: GenerateWelcomeMessageParams): WelcomeMessageData { const { userProfile, hasRecordedMoodToday = false } = params; const hour = new Date().getHours(); const name = userProfile?.name || '朋友'; // 特殊情况的欢迎消息(优先级最高) if (!userProfile?.weight && !userProfile?.height) { return { content: `你好,${name}!🐳\n\n我是你的小海豹Seal!发现你还没有完善健康档案呢~让我帮你开启个性化的健康管理之旅吧!\n\n完善档案后,我就能为你量身定制专属的营养方案、运动计划和生活建议啦!`, choices: [ { id: 'profile_setup', label: '完善我的健康档案', value: '我想要完善健康档案,建立个人健康数据', emoji: '📋', recommended: true }, { id: 'nutrition_basics', label: '营养基础知识科普', value: '我想了解一些基础的营养知识', emoji: '🥗' }, { id: 'quick_start', label: '快速开始体验', value: '我想直接体验一下你的功能', emoji: '🚀' } ], interactionType: 'selection' }; } if (userProfile && (!userProfile.pilatesPurposes || userProfile.pilatesPurposes.length === 0)) { return { content: `${getTimeGreeting(hour)},${name}!🐋\n\n作为你的小海豹,我想更了解你的健康需求~这样才能为你制定最适合的个性化方案!\n\n告诉我你最想在哪个方面实现突破吧!`, choices: [ { id: 'weight_management', label: '体重管理和塑形', value: '我想要管理体重,塑造更好的身材', emoji: '⚖️', recommended: true }, { id: 'nutrition_balance', label: '营养均衡摄入', value: '我希望学会营养均衡的饮食搭配', emoji: '🥑' }, { id: 'fitness_routine', label: '规律运动健身', value: '我想建立规律的运动健身习惯', emoji: '💪' }, { id: 'lifestyle_improvement', label: '生活方式优化', value: '我希望全面优化健康的生活方式', emoji: '🌟' } ], interactionType: 'selection' }; } if (hour >= 20 && !hasRecordedMoodToday) { return { content: `${getTimeGreeting(hour)},${name}!🌙\n\n夜深了,小海豹注意到你今天还没有记录心情呢~\n\n情绪健康同样重要!记录心情能帮你更好地了解自己,也有助于制定更贴心的健康方案哦!`, choices: [ { id: 'record_mood', label: '现在记录今天的心情', value: '我想记录一下今天的心情状态', emoji: '😊', recommended: true }, { id: 'mood_tips', label: '了解情绪管理技巧', value: '我想学习一些情绪管理的方法', emoji: '🧘' }, { id: 'sleep_advice', label: '获取睡眠建议', value: '我想了解如何改善睡眠质量', emoji: '🛌' }, { id: 'tomorrow_plan', label: '规划明天的健康计划', value: '我想为明天制定一个健康计划', emoji: '📅' } ], interactionType: 'selection' }; } // 根据时间段生成不同的欢迎消息 return generateTimeBasedWelcome(hour, name, userProfile); } // 获取时间问候语 function getTimeGreeting(hour: number): string { if (hour >= 5 && hour < 9) return '早上好'; if (hour >= 9 && hour < 12) return '上午好'; if (hour >= 12 && hour < 14) return '中午好'; if (hour >= 14 && hour < 18) return '下午好'; if (hour >= 18 && hour < 22) return '晚上好'; return '夜深了'; } // 根据时间段生成个性化欢迎消息 function generateTimeBasedWelcome(hour: number, name: string, userProfile?: UserProfile): WelcomeMessageData { const timeGreeting = getTimeGreeting(hour); if (hour >= 5 && hour < 9) { // 早晨时段 (5-9点) const morningMessages = [ `${timeGreeting},${name}!🌅\n\n新的一天开始啦!小海豹已经准备好陪你开启元气满满的健康旅程了~\n\n今天想从哪个方面开始呢?让我们一起制定一个完美的开始!`, `${timeGreeting},${name}!🐳\n\n早晨的阳光真好呢~小海豹发现,早上是养成健康习惯的黄金时间!\n\n要不要先从一个简单但有效的健康行动开始今天?`, `${timeGreeting},${name}!☀️\n\n小海豹在这里等你啦!新的一天意味着新的机会~\n\n让我帮你规划今天的健康目标,让身心都充满活力!` ]; const content = morningMessages[Math.floor(Math.random() * morningMessages.length)]; return { content, choices: [ { id: 'morning_routine', label: '制定晨间健康计划', value: '我想制定一个晨间健康常规计划', emoji: '🌅', recommended: true }, { id: 'breakfast_plan', label: '营养早餐搭配建议', value: '我想了解营养丰富的早餐搭配', emoji: '🥞' }, { id: 'morning_exercise', label: '晨间运动指导', value: '我想要一些适合晨间的运动建议', emoji: '🏃‍♀️' }, { id: 'energy_boost', label: '提升一天活力的秘诀', value: '我想知道如何让一天都保持活力', emoji: '⚡' } ], interactionType: 'selection' }; } if (hour >= 9 && hour < 12) { // 上午时段 (9-12点) const morningMessages = [ `${timeGreeting},${name}!💼\n\n上午工作时光,别忘了关爱自己哦~小海豹发现很多人在忙碌中忽略了健康!\n\n让我帮你在工作间隙也能保持最佳状态!`, `${timeGreeting},${name}!🐳\n\n上午是大脑最活跃的时候呢!小海豹想提醒你,身体和心理的平衡很重要~\n\n要不要了解一些工作日的健康小贴士?` ]; const content = morningMessages[Math.floor(Math.random() * morningMessages.length)]; return { content, choices: [ { id: 'work_wellness', label: '工作日健康管理', value: '我想了解如何在工作中保持健康', emoji: '💻', recommended: true }, { id: 'hydration_reminder', label: '科学补水指导', value: '我想了解正确的补水方法和时机', emoji: '💧' }, { id: 'stress_management', label: '上午压力缓解', value: '我想学习一些缓解工作压力的方法', emoji: '🧘‍♀️' }, { id: 'snack_healthy', label: '健康零食推荐', value: '我想知道有哪些健康的上午零食', emoji: '🍎' } ], interactionType: 'selection' }; } if (hour >= 12 && hour < 14) { // 午餐时段 (12-14点) return { content: `${timeGreeting},${name}!🍽️\n\n午餐时间到啦!小海豹要提醒你,午餐可是一天中最重要的能量补充时刻~\n\n合理的午餐搭配能让你下午精神饱满,让我帮你优化午餐营养吧!`, choices: [ { id: 'lunch_nutrition', label: '午餐营养搭配指导', value: '我想了解营养均衡的午餐搭配方案', emoji: '🥗', recommended: true }, { id: 'portion_control', label: '食物份量控制技巧', value: '我想学习合理控制食物份量的方法', emoji: '⚖️' }, { id: 'meal_prep', label: '健康餐食准备建议', value: '我想了解如何准备健康的工作日午餐', emoji: '🥘' }, { id: 'digestive_health', label: '促进消化的小贴士', value: '我想了解一些促进消化的健康建议', emoji: '🌿' } ], interactionType: 'selection' }; } if (hour >= 14 && hour < 18) { // 下午时段 (14-18点) const afternoonMessages = [ `${timeGreeting},${name}!🌊\n\n下午是运动的黄金时段呢!小海豹发现这个时间身体机能最活跃~\n\n要不要趁着这个时机为身体注入一些活力?`, `${timeGreeting},${name}!💪\n\n下午时光,正是让身体动起来的好时机!小海豹已经为你准备了各种健身方案~\n\n让我帮你找到最适合的运动方式!` ]; const content = afternoonMessages[Math.floor(Math.random() * afternoonMessages.length)]; return { content, choices: [ { id: 'afternoon_workout', label: '下午运动计划制定', value: '我想制定一个下午运动锻炼计划', emoji: '🏋️‍♀️', recommended: true }, { id: 'office_exercise', label: '办公室运动指导', value: '我想了解一些办公室里能做的运动', emoji: '🪑' }, { id: 'energy_snack', label: '下午健康能量补充', value: '我想了解下午适合的健康能量补充', emoji: '🥜' }, { id: 'posture_correction', label: '体态矫正建议', value: '我想了解如何改善日常体态问题', emoji: '🧍‍♀️' } ], interactionType: 'selection' }; } if (hour >= 18 && hour < 22) { // 晚上时段 (18-22点) return { content: `${timeGreeting},${name}!🌆\n\n忙碌的一天即将结束,这是最适合放松身心的美好时光~\n\n小海豹想陪你一起回顾今天,同时为身心健康做一些温和的调理!`, choices: [ { id: 'evening_routine', label: '晚间健康常规建立', value: '我想建立一个健康的晚间常规', emoji: '🌙', recommended: true }, { id: 'dinner_light', label: '晚餐轻食建议', value: '我想了解适合晚餐的轻食搭配', emoji: '🥙' }, { id: 'relaxation_tips', label: '放松减压指导', value: '我想学习一些晚间放松减压的方法', emoji: '🕯️' }, { id: 'daily_summary', label: '今日健康总结', value: '我想回顾和总结今天的健康表现', emoji: '📝' } ], interactionType: 'selection' }; } // 深夜时段 (22点-5点) return { content: `${timeGreeting},${name}!🌙\n\n夜深了,小海豹关心你的睡眠质量~优质的睡眠是健康的基石呢!\n\n让我帮你为今晚的好眠做一些准备,或者聊聊明天的健康规划吧!`, choices: [ { id: 'sleep_optimization', label: '睡眠质量优化建议', value: '我想了解如何提高睡眠质量', emoji: '😴', recommended: true }, { id: 'bedtime_routine', label: '睡前放松仪式', value: '我想建立一个有助睡眠的睡前仪式', emoji: '🛌' }, { id: 'tomorrow_prep', label: '明日健康规划', value: '我想为明天制定健康计划', emoji: '📅' }, { id: 'night_wellness', label: '夜间健康小贴士', value: '我想了解一些夜间的健康注意事项', emoji: '🌜' } ], interactionType: 'selection' }; } /** * 检查用户今天是否已经记录了心情 * @param lastMoodDate 上次记录心情的日期 * @returns 今天是否已记录心情 */ export function hasRecordedMoodToday(lastMoodDate?: string | Date): boolean { if (!lastMoodDate) return false; const today = dayjs().format('YYYY-MM-DD'); const lastMoodDay = dayjs(lastMoodDate).format('YYYY-MM-DD'); return today === lastMoodDay; }