import 'package:dio/dio.dart'; import '../models/briefing_conversation.dart'; import '../models/message.dart'; import 'api_client.dart'; class BriefingApi { final Dio _dio; const BriefingApi(this._dio); /// GET /api/briefing/conversations/today /// Returns (or creates) today's briefing conversation with messages embedded. Future getToday() async { try { final response = await _dio.get('/api/briefing/conversations/today'); return BriefingConversation.fromJson( response.data as Map); } on DioException catch (e) { throw dioToApp(e); } } /// GET /api/briefing/conversations /// Returns list of past briefing conversations (no messages embedded). Future> getHistory() async { try { final response = await _dio.get('/api/briefing/conversations'); final data = response.data as Map; final list = data['conversations'] as List; return list .map((e) => BriefingConversation.fromJson(e as Map)) .toList(); } on DioException catch (e) { throw dioToApp(e); } } /// GET /api/briefing/conversations/``/messages Future> getMessages(int convId) async { try { final response = await _dio.get('/api/briefing/conversations/$convId/messages'); final data = response.data as Map; final list = data['messages'] as List; return list .map((e) => Message.fromJson(e as Map)) .toList(); } on DioException catch (e) { throw dioToApp(e); } } /// POST /api/briefing/trigger body: {"slot": slot} /// slot: "compilation" | "morning" | "midday" | "afternoon" Future triggerSlot(String slot) async { try { await _dio.post('/api/briefing/trigger', data: {'slot': slot}); } on DioException catch (e) { throw dioToApp(e); } } /// POST /api/briefing/rss-reactions body: {rss_item_id, reaction: "up"|"down"} Future postRssReaction(int rssItemId, String reaction) async { try { await _dio.post('/api/briefing/rss-reactions', data: {'rss_item_id': rssItemId, 'reaction': reaction}); } on DioException catch (e) { throw dioToApp(e); } } /// POST /api/briefing/articles/{itemId}/discuss body: {"conv_id": convId} /// Injects the article as context and triggers LLM generation. /// Returns the assistant_message_id of the generating placeholder. Future discussArticle(int convId, int itemId) async { try { final response = await _dio.post( '/api/briefing/articles/$itemId/discuss', data: {'conv_id': convId}, ); final data = response.data as Map; return data['assistant_message_id'] as int; } on DioException catch (e) { throw dioToApp(e); } } /// DELETE /api/briefing/rss-reactions/{rssItemId} Future deleteRssReaction(int rssItemId) async { try { await _dio.delete('/api/briefing/rss-reactions/$rssItemId'); } on DioException catch (e) { throw dioToApp(e); } } }