import 'dart:convert'; import 'package:shared_preferences/shared_preferences.dart'; class KontrolStorage { static const String _keyManualPompaAir = 'manual_pompa_air'; static const String _keyManualPompaNutrisi = 'manual_pompa_nutrisi'; static const String _keyManualPots = 'manual_pots'; static const String _keyWaktuConfig = 'waktu_config_'; static const String _keySensorConfig = 'sensor_config_'; static const String _keyWaktuModeActive = 'waktu_mode_active'; static const String _keySensorModeActive = 'sensor_mode_active'; // Manual Control - Save static Future saveManualControl({ required bool pompaAir, required bool pompaNutrisi, required List pots, }) async { final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyManualPompaAir, pompaAir); await prefs.setBool(_keyManualPompaNutrisi, pompaNutrisi); await prefs.setString(_keyManualPots, jsonEncode(pots)); } // Manual Control - Load static Future> loadManualControl() async { final prefs = await SharedPreferences.getInstance(); final pompaAir = prefs.getBool(_keyManualPompaAir) ?? false; final pompaNutrisi = prefs.getBool(_keyManualPompaNutrisi) ?? false; final potsJson = prefs.getString(_keyManualPots); List pots = [false, false, false, false, false]; if (potsJson != null) { final decoded = jsonDecode(potsJson) as List; pots = decoded.map((e) => e as bool).toList(); // Ensure we have 5 pots while (pots.length < 5) { pots.add(false); } } return {'pompaAir': pompaAir, 'pompaNutrisi': pompaNutrisi, 'pots': pots}; } // Waktu Config - Save static Future saveWaktuConfig( String potName, List> jadwal, ) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString(_keyWaktuConfig + potName, jsonEncode(jadwal)); } // Waktu Config - Load static Future>> loadWaktuConfig( String potName, ) async { final prefs = await SharedPreferences.getInstance(); final json = prefs.getString(_keyWaktuConfig + potName); if (json != null) { final decoded = jsonDecode(json) as List; return decoded.map((e) => Map.from(e)).toList(); } // Default values return [ { 'jamMulai': '08:00', 'durasi': '10', 'durasiUnit': 'menit', 'pompaAir': false, 'pompaPupuk': false, }, { 'jamMulai': '16:00', 'durasi': '10', 'durasiUnit': 'menit', 'pompaAir': false, 'pompaPupuk': false, }, ]; } // Sensor Config - Save static Future saveSensorConfig( String potName, Map config, ) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString(_keySensorConfig + potName, jsonEncode(config)); } // Sensor Config - Load static Future> loadSensorConfig(String potName) async { final prefs = await SharedPreferences.getInstance(); final json = prefs.getString(_keySensorConfig + potName); if (json != null) { return Map.from(jsonDecode(json)); } // Default values return { 'batasMinimal': '30', 'batasMaksimal': '80', 'durasi': '10', 'durasiUnit': 'menit', }; } // Mode Active Status - Save static Future saveWaktuModeActive(bool isActive) async { final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyWaktuModeActive, isActive); } static Future saveSensorModeActive(bool isActive) async { final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keySensorModeActive, isActive); } // Mode Active Status - Load static Future loadWaktuModeActive() async { final prefs = await SharedPreferences.getInstance(); return prefs.getBool(_keyWaktuModeActive) ?? false; } static Future loadSensorModeActive() async { final prefs = await SharedPreferences.getInstance(); return prefs.getBool(_keySensorModeActive) ?? false; } }