import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:manager_api_new/api.dart'; import 'package:mymuseum_visitapp/Models/visitContext.dart'; import 'package:mymuseum_visitapp/Models/AssistantResponse.dart'; class AiChatMessage { final String role; final String content; AiChatMessage({required this.role, required this.content}); Map toJson() => {'role': role, 'content': content}; } class AssistantService { final VisitAppContext visitAppContext; final List history = []; AssistantService({required this.visitAppContext}); Future chat({ required String message, String? configurationId, }) async { final baseUrl = visitAppContext.clientAPI.apiApi?.basePath ?? 'https://api.mymuseum.be'; final body = { 'message': message, 'instanceId': visitAppContext.instanceId, 'appType': 'Mobile', 'configurationId': configurationId, 'language': visitAppContext.language?.toUpperCase() ?? 'FR', 'history': history.map((m) => m.toJson()).toList(), }; final response = await http.post( Uri.parse('$baseUrl/api/ai/chat'), headers: {'Content-Type': 'application/json'}, body: jsonEncode(body), ); if (response.statusCode == 200) { final data = jsonDecode(response.body) as Map; final result = AssistantResponse.fromJson(data); history.add(AiChatMessage(role: 'user', content: message)); history.add(AiChatMessage(role: 'assistant', content: result.reply)); return result; } else { throw Exception('Erreur assistant: ${response.statusCode}'); } } void clearHistory() => history.clear(); }