import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; class DbPengumuman { static final supabase = Supabase.instance.client; static Future getUserIdAsync() async { final prefs = await SharedPreferences.getInstance(); final ortuId = prefs.getString('user_id_admin'); if (ortuId != null) return ortuId; final id = supabase.auth.currentUser?.id; if (id != null) return id; throw Exception('User belum login'); } // Insert pengumuman baru static Future> insertPengumuman({ required String title, required String tanggalMulai, required String tanggalSelesai, String? keterangan, String? idGuru, }) async { // Bersihkan pengumuman yang sudah kadaluarsa await deleteExpiredPengumuman(); final userId = await getUserIdAsync(); final data = { 'user_id': userId, 'title': title, 'tanggal_mulai': tanggalMulai, 'tanggal_selesai': tanggalSelesai, if (keterangan != null && keterangan.isNotEmpty) 'keterangan': keterangan, if (idGuru != null && idGuru.isNotEmpty) 'id_guru': idGuru, }; final res = await supabase.from('pengumuman').insert(data).select().single(); return res; } // Get pengumuman berdasarkan ID static Future?> getPengumumanById(String id) async { try { final res = await supabase.from('pengumuman').select().eq('id_tabel', id).maybeSingle(); return res; } catch (e) { return null; } } // Hapus otomatis pengumuman yang sudah berakhir (tanggal_selesai < hari ini) static Future deleteExpiredPengumuman() async { try { final now = DateTime.now(); final todayStr = "${now.year}-${now.month.toString().padLeft(2, '0')}-${now.day.toString().padLeft(2, '0')}"; // 1. Dapatkan semua ID pengumuman yang sudah kadaluarsa final expired = await supabase .from('pengumuman') .select('id_tabel') .lt('tanggal_selesai', todayStr); if (expired != null && expired.isNotEmpty) { final List expiredIds = expired .map((e) => e['id_tabel'].toString()) .toList(); // 2. Kosongkan referensi id_pengumuman di tabel absen agar tidak melanggar foreign key constraint await supabase .from('absen') .update({'id_pengumuman': null}) .inFilter('id_pengumuman', expiredIds); // 3. Hapus pengumuman tersebut dari tabel pengumuman await supabase .from('pengumuman') .delete() .inFilter('id_tabel', expiredIds); } } catch (e) { // Silently ignore or log error } } }