import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../data/models/briefing_conversation.dart'; import '../../data/models/message.dart'; import '../../providers/api_client_provider.dart'; import '../../widgets/chat_message_bubble.dart'; class BriefingHistoryScreen extends ConsumerWidget { const BriefingHistoryScreen({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final historyAsync = ref.watch(_briefingHistoryProvider); return Scaffold( appBar: AppBar(title: const Text('Past Briefings')), body: historyAsync.when( loading: () => const Center(child: CircularProgressIndicator()), error: (_, _) => const Center(child: Text('Could not load briefing history.')), data: (convs) { if (convs.isEmpty) { return const Center(child: Text('No past briefings.')); } return ListView.builder( itemCount: convs.length, itemBuilder: (context, i) { final conv = convs[i]; final label = conv.briefingDate ?? conv.title; return ListTile( leading: const Icon(Icons.wb_sunny_outlined), title: Text(label), trailing: const Icon(Icons.chevron_right), onTap: () => Navigator.of(context).push( MaterialPageRoute( builder: (_) => _BriefingDetailScreen(conv: conv), ), ), ); }, ); }, ), ); } } /// Lazily loads and displays all messages for a past briefing. class _BriefingDetailScreen extends ConsumerWidget { final BriefingConversation conv; const _BriefingDetailScreen({required this.conv}); @override Widget build(BuildContext context, WidgetRef ref) { final messagesAsync = ref.watch(_briefingMessagesProvider(conv.id)); return Scaffold( appBar: AppBar(title: Text(conv.briefingDate ?? conv.title)), body: messagesAsync.when( loading: () => const Center(child: CircularProgressIndicator()), error: (_, _) => const Center(child: Text('Could not load messages.')), data: (messages) { if (messages.isEmpty) { return const Center(child: Text('No messages.')); } return ListView.builder( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12), itemCount: messages.length, itemBuilder: (_, i) => ChatMessageBubble(message: messages[i]), ); }, ), ); } } // ── Private providers (scoped to this file) ────────────────────────────────── final _briefingHistoryProvider = FutureProvider>((ref) async { return ref.watch(briefingApiProvider).getHistory(); }); final _briefingMessagesProvider = FutureProvider.family, int>((ref, convId) async { return ref.watch(briefingApiProvider).getMessages(convId); });