import 'dart:io'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; import 'package:share_plus/share_plus.dart'; import '../models/contact.dart'; /// Kapcsolatok CSV-export — a kitűzési jegyzőkönyv-exporttal azonos elvek. /// /// Két dialektus: /// * MAGYAR (Excel-barát): pontosvessző elválasztó, UTF-8 BOM-mal /// (enélkül az Excel elrontja az ékezeteket) /// * NEMZETKÖZI: vessző elválasztó /// /// Mivel a lista már projekthez szűrt (ContactsController.filtered), az /// export mindig a JELENLEG LÁTOTT (kereséssel/projekttel szűrt) sorokat /// menti — amit a képernyőn látsz, azt kapod a fájlban is. class ContactExportService { ContactExportService._(); static Future exportAndShare({ required List contacts, required bool hungarian, String projectName = '', }) async { if (contacts.isEmpty) { throw StateError('Nincs exportálható kapcsolat.'); } final rows = List.from(contacts) ..sort((a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase())); final sep = hungarian ? ';' : ','; String txt(String s) { final v = s.trim(); return v.contains(sep) || v.contains('"') || v.contains('\n') ? '"${v.replaceAll('"', '""')}"' : v; } final header = [ 'Nev', 'Cim', 'Telefon', 'Email', 'Megjegyzes', 'Szélesség', 'Hosszúság', 'EOV_Y', 'EOV_X' ].join(sep); final sb = StringBuffer(); sb.write('\uFEFF'); // UTF-8 BOM — az Excel enélkül elrontja az ékezeteket sb.writeln(header); for (final c in rows) { sb.writeln([ txt(c.name), txt(c.address), txt(c.phone), txt(c.email), txt(c.note), c.lat?.toString() ?? '', c.lon?.toString() ?? '', c.eovY?.toString() ?? '', ].join(sep)); } final dir = await getTemporaryDirectory(); final stamp = DateTime.now() .toIso8601String() .substring(0, 16) .replaceAll(':', '') .replaceAll('-', '') .replaceAll('T', '_'); final safeName = projectName.isEmpty ? 'kapcsolatok' : 'kapcsolatok_${projectName.replaceAll(RegExp(r'[^\w\-]'), '_')}'; final path = p.join(dir.path, '${safeName}_$stamp.csv'); await File(path).writeAsString(sb.toString(), flush: true); await SharePlus.instance.share(ShareParams( files: [XFile(path, mimeType: 'text/csv')], subject: 'Kapcsolatok — $projectName', text: '${rows.length} kapcsolat', )); } }