import 'package:flutter/services.dart'; import '../modelos/alarma_musical.dart'; class DiagnosticoAlarmasAndroid { const DiagnosticoAlarmasAndroid({ required this.puedeProgramarExactas, required this.notificacionesPermitidas, required this.fabricante, required this.versionSdk, }); final bool puedeProgramarExactas; final bool notificacionesPermitidas; final String fabricante; final int versionSdk; factory DiagnosticoAlarmasAndroid.fromMap(Map map) { return DiagnosticoAlarmasAndroid( puedeProgramarExactas: map['canScheduleExactAlarms'] as bool? ?? true, notificacionesPermitidas: map['notificationsEnabled'] as bool? ?? true, fabricante: map['manufacturer'] as String? ?? 'Android', versionSdk: map['sdkInt'] as int? ?? 0, ); } } class ServicioAlarmasAndroid { ServicioAlarmasAndroid({ MethodChannel channel = const MethodChannel('pluriwave/alarm_scheduler'), }) : _channel = channel; final MethodChannel _channel; Future programar(AlarmaMusical alarma) async { final proxima = alarma.proximaEjecucion; if (proxima == null || !alarma.activa) { await cancelar(alarma.id); return; } await _channel.invokeMethod('scheduleAlarm', { 'id': alarma.id, 'title': alarma.nombre, 'triggerAtMillis': proxima.millisecondsSinceEpoch, 'preNoticeAtMillis': proxima.subtract(const Duration(minutes: 30)).millisecondsSinceEpoch, }); } Future cancelar(String alarmaId) => _channel.invokeMethod('cancelAlarm', {'id': alarmaId}); Future diagnostico() async { final raw = await _channel.invokeMethod>( 'diagnostics', ); return DiagnosticoAlarmasAndroid.fromMap(raw ?? const {}); } }