using BankSampahApp.Models; namespace BankSampahApp.Services; public class NotificationService : INotificationService { private readonly List _notifications = [ new() { Id = 1, Title = "User BSU - 1", Category = NotificationCategory.StatusAkun, Severity = NotificationSeverity.Warning, Summary = "Status akun Anda saat ini belum disetujui oleh [Nama BSU]. Mohon menunggu proses verifikasi data oleh pihak BSU. Anda akan mendapatkan notifikasi kembali setelah data Anda diverifikasi.", CreatedAt = DateTime.UtcNow.AddDays(-1), IsRead = false }, new() { Id = 2, Title = "User BSU - 2", Category = NotificationCategory.StatusAkun, Severity = NotificationSeverity.Success, Summary = "Selamat! Akun Anda telah disetujui dan aktif oleh [Nama Bank Sampah Unit (BSU)]. Anda kini dapat melakukan transaksi penyetoran dan penarikan sampah melalui aplikasi Bank Sampah.", CreatedAt = DateTime.UtcNow.AddDays(-2), IsRead = true }, new() { Id = 3, Title = "User BSU - 2", Category = NotificationCategory.StatusAkun, Severity = NotificationSeverity.Error, Summary = "Akun Anda ditolak oleh [Nama Bank Sampah Unit (BSU)]. Alasan: i. Data yang Anda berikan tidak valid atau tidak sesuai. ii. Pelanggaran terhadap kebijakan atau aturan Bank Sampah. Silakan hubungi [Nama BSU] untuk informasi lebih lanjut atau proses pengaktifan kembali akun Anda.", CreatedAt = DateTime.UtcNow.AddDays(-3), IsRead = false }, new() { Id = 4, Title = "User BSU - 2", Category = NotificationCategory.Transaksi, Severity = NotificationSeverity.Success, Summary = "Terima kasih telah melakukan pengumpulan sampah di [Nama BSU]! Anda telah menyetorkan sampah seberat {berat_sampah} kg dengan total nilai sebesar Rp {jumlah_uang}. Terus berkontribusi menjaga lingkungan!", CreatedAt = DateTime.UtcNow.AddDays(-4), IsRead = false }, new() { Id = 5, Title = "User BSU - 2", Category = NotificationCategory.Transaksi, Severity = NotificationSeverity.Success, Summary = "Penarikan saldo Anda telah berhasil diproses di [Nama BSU]. Jumlah yang ditarik: Rp {jumlah_uang}. Sisa saldo tabungan Anda saat ini: Rp {sisa_saldo}. Terima kasih telah berpartisipasi!", CreatedAt = DateTime.UtcNow.AddDays(-5), IsRead = true }, new() { Id = 6, Title = "User BSU - 2", Category = NotificationCategory.StatusAkun, Severity = NotificationSeverity.Success, Summary = "Selamat! Akun Bank Sampah Unit (BSU) Anda telah disetujui dan diaktifkan oleh pihak Dinas. Anda kini dapat melakukan pengelolaan data nasabah, transaksi, serta pelaporan melalui sistem Bank Sampah.", CreatedAt = DateTime.UtcNow.AddDays(-6), IsRead = true }, new() { Id = 7, Title = "User BSU - 2", Category = NotificationCategory.StatusAkun, Severity = NotificationSeverity.Warning, Summary = "Status verifikasi Bank Sampah Unit (BSU) Anda saat ini belum disetujui oleh pihak Dinas. Mohon menunggu proses pemeriksaan data dan kelengkapan dokumen.", CreatedAt = DateTime.UtcNow.AddDays(-7), IsRead = false }, new() { Id = 8, Title = "User BSU - 2", Category = NotificationCategory.StatusAkun, Severity = NotificationSeverity.Error, Summary = "Mohon maaf, akun Bank Sampah Unit (BSU) Anda tidak dapat diaktifkan oleh pihak Dinas. Silakan lengkapi data atau hubungi pihak Dinas untuk proses klarifikasi dan pengajuan ulang.", CreatedAt = DateTime.UtcNow.AddDays(-8), IsRead = false }, new() { Id = 9, Title = "Pengajuan BSU - 1", Category = NotificationCategory.Pengajuan, Severity = NotificationSeverity.Info, Summary = "Pengajuan verifikasi Bank Sampah Unit (BSU) Anda telah berhasil dikirim ke Bank Sampah Induk (BSI).\nMohon menunggu proses verifikasi dan persetujuan dari pihak BSI.\nAnda akan mendapatkan notifikasi kembali setelah pengajuan diverifikasi. ♻️", CreatedAt = DateTime.UtcNow.AddDays(-9), IsRead = false }, new() { Id = 10, Title = "Pengajuan BSU - 1", Category = NotificationCategory.Pengajuan, Severity = NotificationSeverity.Success, Summary = "Selamat! 🎉\nPengajuan verifikasi Bank Sampah Unit (BSU) Anda telah disetujui dan diaktifkan oleh Bank Sampah Induk (BSI).\nAnda kini dapat mulai melakukan pengelolaan data transaksi.", CreatedAt = DateTime.UtcNow.AddDays(-10), IsRead = false }, new() { Id = 11, Title = "Pengajuan BSU - 2", Category = NotificationCategory.Pengajuan, Severity = NotificationSeverity.Warning, Summary = "Anda menerima pengajuan keanggotaan baru dari Nasabah yang ingin bergabung dengan Bank Sampah Unit (BSU) Anda.\nMohon lakukan verifikasi data dan kelengkapan identitas sebelum memberikan keputusan.\n🔹 Nama Nasabah: {nama_nasabah}\n🔹 Tanggal Pengajuan: {tanggal_pengajuan}\n🔹 Nomor HP / ID Nasabah: {id_nasabah}\nLakukan verifikasi agar nasabah dapat segera menjadi anggota aktif BSU Anda. ♻️", CreatedAt = DateTime.UtcNow.AddDays(-11), IsRead = true }, new() { Id = 12, Title = "Pengajuan BSU - 2", Category = NotificationCategory.Pengajuan, Severity = NotificationSeverity.Info, Summary = "Anda menerima pengajuan keanggotaan baru dari Bank Sampah Unit (BSU).\nMohon tinjau dan verifikasi data sebelum menyetujui atau menolak pengajuan.\n🔹 Nama BSU: {nama_bsu}\n🔹 Tanggal Pengajuan: {tanggal_pengajuan}\n🔹 Diajukan oleh: {nama_pengaju / penanggung_jawab}\nSegera lakukan verifikasi agar BSU dapat menjadi bagian dari jaringan Bank Sampah Induk Anda. ♻️", CreatedAt = DateTime.UtcNow.AddDays(-12), IsRead = false }, new() { Id = 13, Title = "Pengajuan BSU - 3", Category = NotificationCategory.Pengajuan, Severity = NotificationSeverity.Warning, Summary = "Terdapat pengajuan verifikasi baru dari Bank Sampah Unit (BSU) yang perlu ditinjau.\nSilakan lakukan pemeriksaan data dan dokumen BSU sebelum menentukan status persetujuan.\n🔹 Nama BSU: {nama_bsu}\n🔹 Tanggal Pengajuan: {tanggal_pengajuan}\n🔹 Diajukan oleh: {nama_pengaju / penanggung_jawab}\nSegera lakukan verifikasi agar BSU dapat melanjutkan proses operasionalnya. ♻️", CreatedAt = DateTime.UtcNow.AddDays(-13), IsRead = true } ]; public Task> GetNotificationsAsync(NotificationCategory? category = null) { IEnumerable query = _notifications; if (category.HasValue) { query = query.Where(n => n.Category == category.Value); } return Task.FromResult>(query .OrderByDescending(n => n.CreatedAt) .Select(n => new NotificationItem { Id = n.Id, Title = n.Title, Summary = n.Summary, Category = n.Category, Severity = n.Severity, CreatedAt = n.CreatedAt, Link = $"/Notifications/Show/{n.Id}", IsRead = n.IsRead }) .ToList()); } public NotificationItem? GetById(int id) { var notification = _notifications.FirstOrDefault(n => n.Id == id); return notification is null ? null : new NotificationItem { Id = notification.Id, Title = notification.Title, Summary = notification.Summary, Category = notification.Category, Severity = notification.Severity, CreatedAt = notification.CreatedAt, Link = $"/Notifications/Show/{notification.Id}", IsRead = notification.IsRead }; } public Task UpdateReadStateAsync(int id, bool isRead) { var notification = _notifications.FirstOrDefault(n => n.Id == id); if (notification is null) { return Task.FromResult(false); } notification.IsRead = isRead; return Task.FromResult(true); } public Task DeleteAsync(int id) { var notification = _notifications.FirstOrDefault(n => n.Id == id); if (notification is null) { return Task.FromResult(false); } _notifications.Remove(notification); return Task.FromResult(true); } }