import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:firebase_database/firebase_database.dart'; import '../../../routes/app_pages.dart'; class JadwalItem { String key; String jam; int takar; int intervalSet; JadwalItem({ required this.key, required this.jam, required this.takar, required this.intervalSet, }); factory JadwalItem.fromMap(String key, Map map) { return JadwalItem( key: key, jam: map['jam'] ?? '', takar: map['takar'] ?? 0, intervalSet: map['interval_set'] ?? 0, ); } Map toJson() { return { 'jam': jam, 'takar': takar, 'interval_set': intervalSet, }; } } class JadwalController extends GetxController { final DatabaseReference _jadwalRef = FirebaseDatabase.instance.ref().child('jadwal_pakan'); final DatabaseReference _settingRef = FirebaseDatabase.instance.ref().child('setting'); // Update path var jadwalList = [].obs; var intervalPembersih = 60.obs; @override void onInit() { super.onInit(); fetchJadwal(); fetchIntervalPembersih(); } void fetchJadwal() { _jadwalRef.onValue.listen((event) { final data = event.snapshot.value as Map?; if (data != null) { final items = []; data.forEach((key, value) { items.add(JadwalItem.fromMap(key, value)); }); jadwalList.value = items; } else { jadwalList.clear(); } }); } void fetchIntervalPembersih() { _settingRef.child('interval_pembersih').onValue.listen((event) { final value = event.snapshot.value; if (value != null) { intervalPembersih.value = int.tryParse(value.toString()) ?? 60; } }); } Future setIntervalPembersih(int interval) async { await _settingRef.update({'interval_pembersih': interval}); } Future addJadwal(String jam, int takar, int intervalSet) async { final newRef = _jadwalRef.push(); await newRef.set({ 'jam': jam, 'takar': takar, 'interval_set': intervalSet, }); } Future updateJadwal(String key, String jam, int takar, int intervalSet) async { await _jadwalRef.child(key).update({ 'jam': jam, 'takar': takar, 'interval_set': intervalSet, }); } Future deleteJadwal(String key) async { await _jadwalRef.child(key).remove(); } void keNotifikasi() => Get.toNamed(Routes.NOTIFIKASI); void showEditIntervalDialog(BuildContext context, int currentInterval) { final intervalController = TextEditingController(text: currentInterval.toString()); Get.dialog( AlertDialog( shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), title: Text("Edit Interval", style: GoogleFonts.poppins(fontWeight: FontWeight.bold)), content: TextField( controller: intervalController, keyboardType: TextInputType.number, decoration: InputDecoration( labelText: 'Interval (menit)', labelStyle: GoogleFonts.poppins(), ), ), actions: [ ElevatedButton( onPressed: () => Get.back(), style: ElevatedButton.styleFrom( backgroundColor: Colors.red, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), child: Text('Batal', style: GoogleFonts.poppins(color: Colors.white)), ), ElevatedButton( onPressed: () { final input = int.tryParse(intervalController.text.trim()); if (input == null || input <= 0) { Get.snackbar('Error', 'Interval harus berupa angka lebih dari 0'); return; } setIntervalPembersih(input); Get.back(); }, style: ElevatedButton.styleFrom( backgroundColor: Colors.blue, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10)), ), child: Text("Simpan", style: GoogleFonts.poppins(color: Colors.white)), ), ], ), ); } }