import 'dart:async';
import 'dart:io';

import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';

/// Schreibt Login-/Logout-relevante Ereignisse in eine Datei, die einen
/// App-Neustart übersteht. Zweck: den Uta-Random-Logout-Bug nachvollziehen
/// können, auch wenn die App zwischen dem Logout und dem nächsten Blick ins
/// Log neu gestartet wurde (siehe ROADMAP M1).
class AuthLog {
  static const _maxLines = 500;
  static File? _file;

  static Future<File> _ensureFile() async {
    final existing = _file;
    if (existing != null) return existing;
    final dir = await getApplicationSupportDirectory();
    final file = File(p.join(dir.path, 'auth_log.txt'));
    return _file = file;
  }

  static Future<void> write(String message) async {
    try {
      final file = await _ensureFile();
      await file.writeAsString(
        '${DateTime.now().toIso8601String()} $message\n',
        mode: FileMode.append,
        flush: true,
      );
      final lines = await file.readAsLines();
      if (lines.length > _maxLines) {
        await file.writeAsString(
          '${lines.sublist(lines.length - _maxLines).join('\n')}\n',
        );
      }
    } catch (_) {
      // Logging darf selbst nie einen Fehlerpfad (oder gar einen Logout) auslösen.
    }
  }

  static Future<String> read() async {
    try {
      final file = await _ensureFile();
      if (!await file.exists()) return '(noch keine Einträge)';
      return await file.readAsString();
    } catch (e) {
      return 'Log konnte nicht gelesen werden: $e';
    }
  }
}
