import '../database/daos/mood_dao.dart'; abstract class PromptBuilder { static String buildWeeklyPrompt(List entries) { final lines = entries.map(_entryLine).join('\n'); return ''' You are a personal wellbeing assistant analysing a private mood journal. Analyse the following data and identify 2–3 patterns or correlations across mood, sleep, energy, positivity, and self-worth. End with one specific, actionable suggestion. Be concise (4–6 sentences total). Do not greet the user. $lines'''; } static String _entryLine(MoodEntryWithActivities e) { final dt = e.entry.timestamp; final date = '${dt.year}-${dt.month.toString().padLeft(2, '0')}-${dt.day.toString().padLeft(2, '0')}'; final time = '${dt.hour.toString().padLeft(2, '0')}:${dt.minute.toString().padLeft(2, '0')}'; final parts = [ '$date $time', 'Mood ${e.entry.moodLevel}/5', ]; if (e.entry.sleepMinutes != null) { final h = e.entry.sleepMinutes! ~/ 60; final m = (e.entry.sleepMinutes! % 60).toString().padLeft(2, '0'); parts.add('Sleep ${h}h$m'); } if (e.entry.energyLevel != null) { parts.add('Energy ${_scale(e.entry.energyLevel!, _energyLabels)}'); } if (e.entry.positivityLevel != null) { parts.add('Positivity ${_scale(e.entry.positivityLevel!, _positivityLabels)}'); } if (e.entry.selfWorthLevel != null) { parts.add('Self-worth ${_scale(e.entry.selfWorthLevel!, _selfWorthLabels)}'); } if (e.activities.isNotEmpty) { parts.add('Activities: ${e.activities.map((a) => a.name).join(', ')}'); } if (e.entry.note != null && e.entry.note!.isNotEmpty) { parts.add('Note: ${e.entry.note}'); } return parts.join(' | '); } static String _scale(int level, List labels) => labels[(level - 1).clamp(0, labels.length - 1)]; static const _energyLabels = ['very low', 'low', 'ok', 'high', 'very high']; static const _positivityLabels = ['very negative', 'negative', 'neutral', 'positive', 'very positive']; static const _selfWorthLabels = ['very low', 'low', 'moderate', 'high', 'very high']; }