import 'dart:convert';
import 'dart:io';
import 'package:file_picker/file_picker.dart';
import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart';
/// Kapselt die plattformseitige Ein-/Ausgabe fuer das Teilen/Importieren von
/// Missionen und Drohnenprofilen (Doku 3.5/3.6): schreibt eine JSON-Datei in
/// ein temporaeres Verzeichnis und oeffnet das native Share-Sheet (analog
/// navigator.share() im HTML-Demonstrator), bzw. liest eine vom Nutzer
/// ausgewaehlte JSON-Datei ein (analog dem versteckten ``).
///
/// Bewusst als Klasse mit Instanzmethoden (nicht als statische Aufrufe der
/// Plugins direkt) gehalten, damit sie sich ueber einen Riverpod-Provider
/// durch einen Test-Doppelgaenger ersetzen laesst, ohne echte Platform-
/// Channels anzusprechen.
class SharingService {
const SharingService();
/// Schreibt [json] in eine temporaere Datei namens [filename] und oeffnet
/// das native Share-Sheet dafuer. Es gibt bewusst keinen Blob-/Download-
/// Fallback wie im HTML-Demonstrator - auf Android ist `share_plus`
/// immer verfuegbar.
Future shareJsonFile({
required String json,
required String filename,
required String shareTitle,
}) async {
final dir = await getTemporaryDirectory();
final file = File('${dir.path}/$filename');
await file.writeAsString(json);
await SharePlus.instance.share(
ShareParams(files: [XFile(file.path)], title: shareTitle),
);
}
/// Oeffnet den nativen Dateiauswahl-Dialog fuer eine `.json`-Datei und
/// gibt deren Textinhalt zurueck - null, wenn der Nutzer abgebrochen hat.
Future pickJsonFileText() async {
final result = await FilePicker.pickFiles(
type: FileType.custom,
allowedExtensions: ['json'],
);
if (result == null || result.files.isEmpty) return null;
final bytes = await result.files.first.readAsBytes();
return utf8.decode(bytes);
}
}