import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';

/// Service untuk berbagi data counter antar controller
class CounterService extends GetxService {
  static CounterService get to => Get.find<CounterService>();

  // Penyimpanan lokal
  final GetStorage _storage = GetStorage();

  // Keys untuk penyimpanan
  static const String _keyMenunggu = 'counter_menunggu';
  static const String _keyTerverifikasi = 'counter_terverifikasi';
  static const String _keyDitolak = 'counter_ditolak';
  static const String _keyDiproses = 'counter_diproses';
  static const String _keyNotifikasi = 'counter_notifikasi';
  static const String _keyJadwal = 'counter_jadwal';

  // Counter untuk penitipan
  final RxInt jumlahMenunggu = 0.obs;
  final RxInt jumlahTerverifikasi = 0.obs;
  final RxInt jumlahDitolak = 0.obs;

  // Counter untuk pengaduan
  final RxInt jumlahDiproses = 0.obs;

  // Counter untuk notifikasi
  final RxInt jumlahNotifikasiBelumDibaca = 0.obs;

  // Counter untuk jadwal
  final RxInt jumlahJadwalHariIni = 0.obs;

  @override
  void onInit() {
    super.onInit();
    // Muat nilai counter dari penyimpanan lokal
    loadCountersFromStorage();
  }

  // Metode untuk memuat counter dari penyimpanan lokal
  void loadCountersFromStorage() {
    jumlahMenunggu.value = _storage.read(_keyMenunggu) ?? 0;
    jumlahTerverifikasi.value = _storage.read(_keyTerverifikasi) ?? 0;
    jumlahDitolak.value = _storage.read(_keyDitolak) ?? 0;
    jumlahDiproses.value = _storage.read(_keyDiproses) ?? 0;
    jumlahNotifikasiBelumDibaca.value = _storage.read(_keyNotifikasi) ?? 0;
    jumlahJadwalHariIni.value = _storage.read(_keyJadwal) ?? 0;

    print(
        'Counter loaded from storage - Menunggu: ${jumlahMenunggu.value}, Terverifikasi: ${jumlahTerverifikasi.value}, Ditolak: ${jumlahDitolak.value}');
  }

  // Metode untuk memperbarui counter penitipan
  void updatePenitipanCounters({
    required int menunggu,
    required int terverifikasi,
    required int ditolak,
  }) {
    jumlahMenunggu.value = menunggu;
    jumlahTerverifikasi.value = terverifikasi;
    jumlahDitolak.value = ditolak;

    // Simpan ke penyimpanan lokal
    _storage.write(_keyMenunggu, menunggu);
    _storage.write(_keyTerverifikasi, terverifikasi);
    _storage.write(_keyDitolak, ditolak);

    print(
        'Counter updated and saved - Menunggu: $menunggu, Terverifikasi: $terverifikasi, Ditolak: $ditolak');
  }

  // Metode untuk memperbarui counter pengaduan
  void updatePengaduanCounter(int diproses) {
    jumlahDiproses.value = diproses;
    _storage.write(_keyDiproses, diproses);
  }

  // Metode untuk memperbarui counter notifikasi
  void updateNotifikasiCounter(int belumDibaca) {
    jumlahNotifikasiBelumDibaca.value = belumDibaca;
    _storage.write(_keyNotifikasi, belumDibaca);
  }

  // Metode untuk memperbarui counter jadwal
  void updateJadwalCounter(int hariIni) {
    jumlahJadwalHariIni.value = hariIni;
    _storage.write(_keyJadwal, hariIni);
  }
}
