import 'package:flutter/material.dart'; import 'package:lucide_icons/lucide_icons.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../data/models/journal_day.dart'; import '../../providers/api_client_provider.dart'; import '../../widgets/chat_message_bubble.dart'; class JournalHistoryScreen extends ConsumerWidget { const JournalHistoryScreen({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final daysAsync = ref.watch(_journalDaysProvider); return Scaffold( appBar: AppBar(title: const Text('Past Days')), body: daysAsync.when( loading: () => const Center(child: CircularProgressIndicator()), error: (_, _) => const Center(child: Text('Could not load journal history.')), data: (days) { if (days.isEmpty) { return const Center(child: Text('No past days.')); } return ListView.builder( itemCount: days.length, itemBuilder: (context, i) { final isoDate = days[i]; return ListTile( leading: const Icon(LucideIcons.bookOpen), title: Text(isoDate), trailing: const Icon(LucideIcons.chevronRight), onTap: () => Navigator.of(context).push( MaterialPageRoute( builder: (_) => _JournalDayDetailScreen(isoDate: isoDate), ), ), ); }, ); }, ), ); } } class _JournalDayDetailScreen extends ConsumerWidget { final String isoDate; const _JournalDayDetailScreen({required this.isoDate}); @override Widget build(BuildContext context, WidgetRef ref) { final dayAsync = ref.watch(_journalDayProvider(isoDate)); return Scaffold( appBar: AppBar(title: Text(isoDate)), body: dayAsync.when( loading: () => const Center(child: CircularProgressIndicator()), error: (_, _) => const Center(child: Text('Could not load that day.')), data: (day) { if (day.messages.isEmpty) { return const Center(child: Text('No messages.')); } return ListView.builder( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12), itemCount: day.messages.length, itemBuilder: (_, i) => ChatMessageBubble(message: day.messages[i]), ); }, ), ); } } // ── Private providers (scoped to this file) ────────────────────────────────── final _journalDaysProvider = FutureProvider>((ref) async { return ref.watch(journalApiProvider).getDays(); }); final _journalDayProvider = FutureProvider.family((ref, isoDate) async { return ref.watch(journalApiProvider).getDay(isoDate); });