import 'package:firebase_database/firebase_database.dart'; import 'package:flutter/foundation.dart'; import '../models/sensor_data_model.dart'; class RealtimeDatabaseService { final FirebaseDatabase _database = FirebaseDatabase.instance; // Get database reference DatabaseReference get _sensorRef => _database.ref().child('sensor_data'); // Stream untuk mendapatkan data sensor secara real-time Stream get sensorDataStream { return _sensorRef.onValue.map((event) { if (event.snapshot.value != null) { final data = Map.from(event.snapshot.value as Map); return SensorData.fromJson(data); } return SensorData( apiTerdeteksi: false, buzzerActive: false, exhaustActive: false, gasValue: 0, kelembapan: 0, pumpActive: false, suhu: 0.0, ); }); } // Get data sensor satu kali Future getSensorData() async { try { final snapshot = await _sensorRef.get(); if (snapshot.value != null) { final data = Map.from(snapshot.value as Map); return SensorData.fromJson(data); } return SensorData( apiTerdeteksi: false, buzzerActive: false, exhaustActive: false, gasValue: 0, kelembapan: 0, pumpActive: false, suhu: 0.0, ); } catch (e) { if (kDebugMode) { print('Error getting sensor data: $e'); } throw 'Gagal mengambil data sensor'; } } // Update kontrol sistem (buzzer, exhaust, pump) Future updateControl({ bool? buzzerActive, bool? exhaustActive, bool? pumpActive, }) async { try { Map updates = {}; if (buzzerActive != null) { updates['buzzer_active'] = buzzerActive; } if (exhaustActive != null) { updates['exhaust_active'] = exhaustActive; } if (pumpActive != null) { updates['pump_active'] = pumpActive; } if (updates.isNotEmpty) { await _sensorRef.update(updates); } } catch (e) { if (kDebugMode) { print('Error updating control: $e'); } throw 'Gagal mengupdate kontrol sistem'; } } // Reset all controls Future resetAllControls() async { try { await _sensorRef.update({ 'buzzer_active': false, 'exhaust_active': false, 'pump_active': false, }); } catch (e) { if (kDebugMode) { print('Error resetting controls: $e'); } throw 'Gagal mereset kontrol sistem'; } } // Activate emergency mode Future activateEmergencyMode() async { try { await _sensorRef.update({ 'buzzer_active': true, 'exhaust_active': true, 'pump_active': true, }); } catch (e) { if (kDebugMode) { print('Error activating emergency mode: $e'); } throw 'Gagal mengaktifkan mode darurat'; } } }