import 'package:flutter/foundation.dart'; import 'package:firebase_database/firebase_database.dart'; class TelurProvider extends ChangeNotifier { final FirebaseDatabase _database = FirebaseDatabase.instance; late DatabaseReference _riwayatRef; int _telurHariIni = 0; int _kandang1HariIni = 0; int _kandang2HariIni = 0; int _totalTelur = 0; String _lastResetDate = ''; bool _isSynced = false; int get telurHariIni => _telurHariIni; int get kandang1HariIni => _kandang1HariIni; int get kandang2HariIni => _kandang2HariIni; int get totalTelur => _totalTelur; bool get isSynced => _isSynced; TelurProvider() { _riwayatRef = _database.ref('riwayat/summary'); _initializeRiwayat(); } Future _initializeRiwayat() async { try { // Set initial values if not exist final snapshot = await _riwayatRef.get(); if (!snapshot.exists) { // Create initial structure await _riwayatRef.set({ 'telur_hari_ini': 0, 'kandang1_hari_ini': 0, 'kandang2_hari_ini': 0, 'total_telur': 0, 'last_reset_date': DateTime.now().toIso8601String().split('T')[0], }); } // Fetch current data _loadRiwayat(); // Listen for changes _riwayatRef.onValue.listen((event) { if (event.snapshot.exists) { final data = event.snapshot.value as Map; _telurHariIni = data['telur_hari_ini'] ?? 0; _kandang1HariIni = data['kandang1_hari_ini'] ?? 0; _kandang2HariIni = data['kandang2_hari_ini'] ?? 0; _totalTelur = data['total_telur'] ?? 0; _lastResetDate = data['last_reset_date'] ?? ''; // Check if auto-reset is needed _checkAndResetIfNeeded(); notifyListeners(); } }); _isSynced = true; notifyListeners(); } catch (e) { print('Error initializing telur data: $e'); _isSynced = false; } } Future _loadRiwayat() async { try { final snapshot = await _riwayatRef.get(); if (snapshot.exists) { final data = snapshot.value as Map; _telurHariIni = data['telur_hari_ini'] ?? 0; _kandang1HariIni = data['kandang1_hari_ini'] ?? 0; _kandang2HariIni = data['kandang2_hari_ini'] ?? 0; _totalTelur = data['total_telur'] ?? 0; _lastResetDate = data['last_reset_date'] ?? ''; notifyListeners(); } } catch (e) { print('Error loading telur data: $e'); } } Future _checkAndResetIfNeeded() async { try { final todayDate = DateTime.now().toIso8601String().split('T')[0]; if (_lastResetDate != todayDate) { // Reset telur_hari_ini for new day await _riwayatRef.update({ 'telur_hari_ini': 0, 'kandang1_hari_ini': 0, 'kandang2_hari_ini': 0, 'last_reset_date': todayDate, }); _telurHariIni = 0; _kandang1HariIni = 0; _kandang2HariIni = 0; notifyListeners(); } } catch (e) { print('Error checking/resetting telur data: $e'); } } Future addTelurHariIni(int jumlah) async { try { // Check and reset if needed first await _checkAndResetIfNeeded(); final newTotal = _telurHariIni + jumlah; await _riwayatRef.update({'telur_hari_ini': newTotal}); _telurHariIni = newTotal; notifyListeners(); } catch (e) { print('Error adding telur hari ini: $e'); } } Future setTotalTelur(int total) async { try { await _riwayatRef.update({'total_telur': total}); _totalTelur = total; notifyListeners(); } catch (e) { print('Error setting total telur: $e'); } } Future resetTelurHariIni() async { try { final todayDate = DateTime.now().toIso8601String().split('T')[0]; await _riwayatRef.update({ 'telur_hari_ini': 0, 'kandang1_hari_ini': 0, 'kandang2_hari_ini': 0, 'last_reset_date': todayDate, }); _telurHariIni = 0; _kandang1HariIni = 0; _kandang2HariIni = 0; notifyListeners(); } catch (e) { print('Error resetting telur hari ini: $e'); } } Future manualReset() async { try { await _riwayatRef.set({ 'telur_hari_ini': 0, 'kandang1_hari_ini': 0, 'kandang2_hari_ini': 0, 'total_telur': 0, 'last_reset_date': DateTime.now().toIso8601String().split('T')[0], }); _telurHariIni = 0; _kandang1HariIni = 0; _kandang2HariIni = 0; _totalTelur = 0; notifyListeners(); } catch (e) { print('Error manual reset: $e'); } } }