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<void> exportAndShare({
    required List<Contact> contacts,
    required bool hungarian,
    String projectName = '',
  }) async {
    if (contacts.isEmpty) {
      throw StateError('Nincs exportálható kapcsolat.');
    }

    final rows = List<Contact>.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'].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),
      ].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',
    ));
  }
}
