import 'dart:io'; import 'dart:typed_data'; import 'package:dio/dio.dart'; import 'package:path/path.dart' as path; import '../models/content_post.dart'; /// Service API pour l'amélioration IA et la génération de texte class ApiService { late final Dio _dio; static const String baseUrl = 'https://api.your-ai-provider.com'; static const String aiEnhancementEndpoint = '/api/v1/enhance-image'; static const String textGenerationEndpoint = '/api/v1/generate-text'; ApiService() { _dio = Dio( BaseOptions( baseUrl: baseUrl, connectTimeout: const Duration(seconds: 30), receiveTimeout: const Duration(seconds: 30), sendTimeout: const Duration(seconds: 30), ), ); // Ajouter un interceptor pour les logs (development) _dio.interceptors.add( LogInterceptor( requestBody: true, responseBody: true, error: true, ), ); } /// Améliorer un média via l'API IA Future enhanceMedia( File mediaFile, { required MediaType mediaType, }) async { try { final fileName = path.basename(mediaFile.path); final bytes = await mediaFile.readAsBytes(); final formData = FormData.fromMap({ 'media': MultipartFile.fromBytes(bytes, filename: fileName), 'type': mediaType.name, 'versions': '3', }); final response = await _dio.post>( aiEnhancementEndpoint, data: formData, ); if (response.statusCode == 200) { final data = response.data!; final versions = []; // Parser les URLs retournées et télécharger if (data['urls'] is List) { for (final url in data['urls'] as List) { final file = await _downloadFile(url.toString()); versions.add(file); } } return ( versions: versions, processedAt: DateTime.now(), error: null, ); } else { throw Exception('API error: ${response.statusCode}'); } } on DioException catch (e) { return ( versions: const [], processedAt: DateTime.now(), error: e.message ?? 'Unknown error', ); } catch (e) { return ( versions: const [], processedAt: DateTime.now(), error: e.toString(), ); } } /// Générer du texte basé sur le profil et les préférences Future generateTextProposals({ required String profession, required String tone, required String style, required bool includeEmojis, required bool includeCommercialInfo, String? mediaDescription, }) async { try { final response = await _dio.post>( textGenerationEndpoint, data: { 'profession': profession, 'tone': tone, 'style': style, 'include_emojis': includeEmojis, 'include_commercial_info': includeCommercialInfo, 'media_description': mediaDescription, 'num_proposals': 3, }, ); if (response.statusCode == 200) { final data = response.data!; final proposals = List.from(data['proposals'] as List? ?? []); return ( proposals: proposals, generatedAt: DateTime.now(), error: null, ); } else { throw Exception('API error: ${response.statusCode}'); } } on DioException catch (e) { // Retourner des proposals mock pour le développement return ( proposals: _getMockProposals(includeEmojis), generatedAt: DateTime.now(), error: e.message, ); } catch (e) { return ( proposals: _getMockProposals(includeEmojis), generatedAt: DateTime.now(), error: e.toString(), ); } } /// Télécharger un fichier depuis une URL Future _downloadFile(String urlString) async { try { final response = await _dio.get( urlString, options: Options(responseType: ResponseType.bytes), ); final dir = Directory.systemTemp; final file = File('${dir.path}/enhanced_${DateTime.now().millisecondsSinceEpoch}.jpg'); await file.writeAsBytes(response.data!); return file; } catch (e) { throw Exception('Failed to download file: $e'); } } /// Propositions mock pour le développement List _getMockProposals(bool withEmojis) { if (withEmojis) { return [ '🌟 Découvrez notre nouvelle collection ! ✨ Qualité premium et innovation réunies. 💼 Rejoignez-nous pour transformer vos projets !', '💡 Excellence et professionnalisme au rendez-vous ! 🎯 Solutions innovantes pour tous. Faites confiance à notre expertise ! 🚀', '🔥 Olé Olé ! 🎉 Créativité et style sans limites. Vos rêves deviennent réalité avec nous ! ✨🌈', ]; } else { return [ 'Découvrez notre nouvelle collection. Qualité premium et innovation réunies. Rejoignez-nous pour transformer vos projets.', 'Excellence et professionnalisme au rendez-vous. Solutions innovantes pour tous. Faites confiance à notre expertise.', 'Créativité et style sans limites. Vos rêves deviennent réalité avec nous.', ]; } } }