<?php

namespace App\Services;

use Carbon\Carbon;

class DummyDataService
{
    /**
     * Data dummy untuk daftar siswa dan pengguna.
     */
    public static function getAllSiswa(): array
    {
        return [
            [
                'id' => 1,
                'nisn' => '1234567890',
                'nama_lengkap' => 'Silvi Rahmawati',
                'email' => 'silvi.rahmawati@smkn1perpus.sch.id',
                'nomor_hp' => '08123456789',
                'password' => 'password',
                'role' => 'siswa',
                'kelas' => 'XII RPL',
                'golongan' => 'A',
                'is_banned' => false,
            ],
            [
                'id' => 2,
                'nama_lengkap' => 'Budi Santoso',
                'nip' => '197812312005011',
                'email' => 'budi.santoso@smkn1perpus.sch.id',
                'password' => 'password',
                'role' => 'penjaga perpus',
            ],
            [
                'id' => 3,
                'nisn' => '9988776655',
                'nama_lengkap' => 'Siti Nurhaliza',
                'email' => 'siti.nurhaliza@smkn1perpus.sch.id',
                'nomor_hp' => '081998877665',
                'password' => 'password',
                'role' => 'siswa',
                'kelas' => 'XII RPL A',
                'golongan' => 'A',
                'is_banned' => true,
            ],

            [
                'id' => 4,
                'nisn' => '5566778899',
                'nama_lengkap' => 'Andi Pratama',
                'email' => 'andi.pratama@smkn1perpus.sch.id',
                'nomor_hp' => '081556677889',
                'password' => 'password',
                'role' => 'siswa',
                'kelas' => 'XII RPL A',
                'golongan' => 'A',
                'is_banned' => false,
            ],
            [
                'id' => 5,
                'nama_lengkap' => 'Rina Marlina',
                'nip' => '198506152010012',
                'email' => 'rina.marlina@smkn1perpus.sch.id',
                'password' => 'password',
                'role' => 'guru',
                'is_banned' => false,
            ],
        ];
    }

    /**
     * Data dummy untuk grafik aktivitas membaca mingguan di laporan guru.
     */
    public static function getAktivitasMingguan(): array
    {
        return [
            'labels' => ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu', 'Minggu'],
            'data' => [15, 22, 18, 25, 20, 30, 28],
        ];
    }

    /**
     * Data dummy untuk tabel peminjaman aktif di dashboard admin.
     */
    public static function getAdminPeminjamanAktif(): \Illuminate\Support\Collection
    {
        $allBooks = self::getAllBooks();
        $allSiswa = collect(self::getAllSiswa());
        $bukuDipinjam = $allBooks->whereIn('status', ['Dipinjam', 'Terlambat']);
        $grouped = $bukuDipinjam->groupBy(function ($item) {
            return is_array($item['user_id']) ? $item['user_id'][0] : $item['user_id'];
        });

        return $grouped->map(function ($books, $userId) use ($allSiswa) {
            $siswa = $allSiswa->firstWhere('id', $userId);
            $firstBook = $books->first();
            $tglKembali = Carbon::now()->addDays($firstBook['sisa_hari']);

            return [
                'id_peminjaman' => 'PIN-ADM-' . sprintf('%03d', $userId),
                'user_id' => $userId,
                'role' => $siswa ? $siswa['role'] : 'siswa',
                'is_banned' => $siswa ? ($siswa['is_banned'] ?? false) : false,

                'peminjam' => $siswa ? $siswa['nama_lengkap'] : 'User Tidak Dikenal',
                'nomor_hp' => $siswa ? ($siswa['nomor_hp'] ?? '-') : '-',
                'tanggal_pinjam' => Carbon::now()->subDays(7),
                'tenggat_kembali' => $tglKembali,
                'denda_per_hari' => 1000,

                'books' => $books->map(function ($b) {
                    return [
                        'id' => $b['id'],
                        'judul' => $b['judul'],
                        'cover' => $b['cover']
                    ];
                })->toArray()
            ];
        })->values();
    }

    /**
     *Data Dummy untuk fitur Rekomendasi Pembelajaran.
     */
    public static function getRekomendasiPembelajaran(): \Illuminate\Support\Collection
    {
        return collect([
            [
                'id' => 1,
                'judul' => 'Sistem Tata Surya - Rangkuman Materi IPA Terpadu',
                'kategori' => 'IPA',
                'youtube_link' => 'https://www.youtube.com/watch?v=libKVRa01L8',
                'deskripsi' => '<p>Video animasi seru yang menjelaskan tentang planet-planet di tata surya kita...</p>',
            ],
            [
                'id' => 2,
                'judul' => 'Macam-macam Zat dan Perubahannya - IPA Kelas 7',
                'kategori' => 'IPA',
                'youtube_link' => 'https://www.youtube.com/watch?v=CfwPsKdC5w8',
                'deskripsi' => '<p>Zat (materi) adalah sesuatu yang menempati ruang dan mempunyai massa...</p>',
            ],
            [
                'id' => 3,
                'judul' => 'Sejarah Kerajaan Majapahit, Kerajaan Terbesar di Nusantara',
                'kategori' => 'IPS',
                'youtube_link' => 'https://www.youtube.com/watch?v=2Z9hqVqPY_s',
                'deskripsi' => '<p>Pelajari sejarah salah satu kerajaan terbesar di Indonesia...</p>',
            ],
            [
                'id' => 4,
                'judul' => 'Belajar HTML dari NOL untuk Pemula',
                'kategori' => 'Informatika',
                'youtube_link' => 'https://www.youtube.com/watch?v=NBZ9Ro6UKV8',
                'deskripsi' => '<p>Ingin belajar membuat website? Mulai dari sini!...</p>',
            ],
            [
                'id' => 5,
                'judul' => 'Rumus Cepat Teorema Pythagoras',
                'kategori' => 'Matematika',
                'youtube_link' => 'https://youtu.be/JJaptwjRbxc?si=XRxkrAf5G76iJ5CG',
                'deskripsi' => '<p>Jangan takut lagi dengan soal Pythagoras!...</p>',
            ],
            [
                'id' => 6,
                'judul' => 'Cara Menggambar Perspektif 1 Titik Hilang',
                'kategori' => 'Seni Budaya',
                'youtube_link' => 'https://youtu.be/SS7dLGDWUSs?si=lVw8jBkaWT---7ch',
                'deskripsi' => '<p>Buat gambarmu terlihat lebih hidup dan realistis!...</p>',
            ],
            [
                'id' => 7,
                'judul' => 'Sistem Peredaran Darah pada Manusia',
                'kategori' => 'IPA',
                'youtube_link' => 'https://youtu.be/QLoqMruGbkc?si=KiP5VZ4ByKSdFJK9',
                'deskripsi' => '<p>Pahami bagaimana jantung memompa darah ke seluruh tubuh...</p>',
            ],
            [
                'id' => 8,
                'judul' => 'Unsur-Unsur Intrinsik Cerpen',
                'kategori' => 'Bahasa Indonesia',
                'youtube_link' => 'https://youtu.be/PQNuvyQZYvI?si=Lr9AeTO_k6vY21ei',
                'deskripsi' => '<p>Analisis sebuah cerita pendek menjadi lebih mudah...</p>',
            ],
            [
                'id' => 9,
                'judul' => 'Apa itu Pemanasan Global?',
                'kategori' => 'IPS',
                'youtube_link' => 'https://youtu.be/pVjXm340tbw?si=GeMhYK1FSOGtV86X',
                'deskripsi' => '<p>Mengapa suhu bumi semakin panas? Pelajari tentang penyebabnya...</p>',
            ],
            [
                'id' => 10,
                'judul' => 'APA ITU LUBANG HITAM?',
                'kategori' => 'Sains',
                'youtube_link' => 'https://youtu.be/Tx87wEaDtxo?si=fNORkTYOeLiH9_xh',
                'deskripsi' => '<p>Jelajahi salah satu objek paling misterius di alam semesta...</p>',
            ],
        ]);
    }

    /**
     * Data dummy untuk menampilkan 10 siswa paling aktif di laporan guru.
     */
    public static function getSiswaTeraktif(): array
    {
        return [
            ['nama' => 'Silvi Rahmawati', 'total_buku' => 45, 'kelas' => 'XII RPL'],
            ['nama' => 'Siti Nurhaliza', 'total_buku' => 33, 'kelas' => 'XII RPL A'],
            ['nama' => 'Andi Pratama', 'total_buku' => 30, 'kelas' => 'XII RPL B'],
            ['nama' => 'John Wick', 'total_buku' => 28, 'kelas' => 'XI TKJ'],
            ['nama' => 'Dewi Lestari', 'total_buku' => 25, 'kelas' => 'XII AKL'],
            ['nama' => 'Eko Prasetyo', 'total_buku' => 22, 'kelas' => 'XI MM'],
            ['nama' => 'Rina Marlina', 'total_buku' => 20, 'kelas' => 'XII TKJ A'],
            ['nama' => 'Budi Santoso', 'total_buku' => 18, 'kelas' => 'X OTKP'],
            ['nama' => 'Putri Amelia', 'total_buku' => 16, 'kelas' => 'XI RPL C'],
            ['nama' => 'Ahmad Jono', 'total_buku' => 12, 'kelas' => 'X TKJ B'],
        ];
    }

    /**
     * Data dummy untuk halaman Laporan Minat Baca khusus Guru.
     */
    public static function getLaporanMinatBaca(): array
    {
        return [
            'buku_terpopuler' => [
                ['judul' => 'Modul Ajar IPAS', 'penulis' => 'Tim Kemdikbud Ristek', 'total_pembaca' => 125, 'cover' => 'images/covers/ipas.jpg'],
                ['judul' => 'Ayah', 'penulis' => 'Andrea Hirata', 'total_pembaca' => 98, 'cover' => 'images/covers/ayah.png'],
                ['judul' => 'Si Anak Pintar', 'penulis' => 'Tere Liye', 'total_pembaca' => 92, 'cover' => 'images/covers/sianakpintar.jpg'],
            ],
            'kategori_populer' => [
                ['nama' => 'Sains', 'total_pembaca' => 230, 'trend' => 'naik', 'icon' => 'bi-arrow-up-right'],
                ['nama' => 'Fiksi', 'total_pembaca' => 190, 'trend' => 'stabil', 'icon' => 'bi-arrow-right'],
                ['nama' => 'Pendidikan', 'total_pembaca' => 150, 'trend' => 'turun', 'icon' => 'bi-arrow-down-right'],
                ['nama' => 'Novel', 'total_pembaca' => 110, 'trend' => 'naik', 'icon' => 'bi-arrow-up-right'],
            ],
            'insight' => 'Siswa menunjukkan minat baca tertinggi pada kategori Sains dan Fiksi. Buku-buku karangan Tere Liye dan Andrea Hirata masih menjadi favorit.',
        ];
    }

    /**
     * Data dummy untuk Halaman Dashboard Statistik Petugas Perpus
     */
    public static function getAdminDashboardStats(): array
    {
        $allBooks = self::getAllBooks();
        $allUsers = self::getAllSiswa();
        $bukuDipinjam = $allBooks->filter(fn($buku) => $buku['status'] === 'Dipinjam')->count();
        return [
            ['label' => 'Total Buku', 'value' => $allBooks->count(), 'icon' => 'bi-journal-bookmark-fill', 'color' => 'primary'],
            ['label' => 'Total Anggota', 'value' => count($allUsers), 'icon' => 'bi-people-fill', 'color' => 'success'],
            ['label' => 'Buku Dipinjam', 'value' => $bukuDipinjam, 'icon' => 'bi-arrow-up-right-circle-fill', 'color' => 'warning'],
            ['label' => 'Denda Menunggu', 'value' => 0, 'icon' => 'bi-cash-coin', 'color' => 'danger'],
        ];
    }

    /**
     * Data untuk bar chart di dashboard admin (total peminjaman per bulan).
     */
    public static function getStatistikPeminjamanAdmin(): array
    {
        return [
            'labels' => ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul'],
            'data' => [65, 59, 80, 81, 56, 55, 70],
        ];
    }

    /**
     * Data untuk donut chart di dashboard admin (komposisi buku).
     */
    public static function getKomposisiBukuAdmin(): array
    {
        $allBooks = self::getAllBooks();
        return [
            'tersedia' => $allBooks->where('status', 'Tersedia')->count(),
            'dipinjam' => $allBooks->where('status', 'Dipinjam')->count(),
        ];
    }

    /**
     * Data untuk tabel aktivitas terakhir di dashboard admin.
     */
    public static function getAktivitasTerakhir(): array
    {
        return [
            ['nama' => 'Silvi Rahmawati', 'judul_buku' => 'Perahu Kertas', 'tipe' => 'Peminjaman', 'waktu' => '5 menit yang lalu', 'status' => 'Dipinjam'],
            ['nama' => 'Andi Pratama', 'judul_buku' => 'The Last Spell Breather', 'tipe' => 'Pengembalian', 'waktu' => '1 jam yang lalu', 'status' => 'Dikembalikan'],
            ['nama' => 'Siti Nurhaliza', 'judul_buku' => 'Ayah', 'tipe' => 'Baca Online', 'waktu' => '3 jam yang lalu', 'status' => 'Selesai'],
            ['nama' => 'Rina Marlina', 'judul_buku' => 'Modul Ajar IPAS', 'tipe' => 'Peminjaman', 'waktu' => 'Kemarin', 'status' => 'Dipinjam'],
        ];
    }
    /**
     * Data untuk halaman Dashboard Siswa dan Guru dengan warna spesifik.
     */
    public static function getDashboardStats(): array
    {
        return [
            ['label' => 'Buku yang dipinjam', 'value' => 3, 'icon' => 'bi-book-half', 'color' => 'primary'],


            ['label' => 'Tenggat Waktu', 'value' => '2', 'icon' => 'bi-clock-history', 'color' => 'danger'],


            ['label' => 'Buku dikembalikan', 'value' => 12, 'icon' => 'bi-check-circle', 'color' => 'success'],


            ['label' => 'History Baca', 'value' => 15, 'icon' => 'bi-hourglass-split', 'color' => 'warning'],
        ];
    }

    /**
     * Data untuk pengumuman 
     */
    public static function getPengumuman(): array
    {
        $pengumuman = [
            ['id' => 1, 'type' => 'warning', 'icon' => 'bi-exclamation-triangle-fill', 'title' => 'Perpustakaan Tutup', 'content' => 'Perpustakaan akan tutup pada tanggal 25 Desember untuk perayaan Natal.'],
            ['id' => 2, 'type' => 'info', 'icon' => 'bi-info-circle-fill', 'title' => 'Buku Baru Tersedia', 'content' => 'Edisi baru telah ditambahkan ke koleksi perpustakaan digital.'],
        ];

        // Buat 30 data dummy tambahan dengan 'id'
        for ($i = 3; $i <= 32; $i++) {
            $pengumuman[] = ['id' => $i, 'type' => 'secondary', 'icon' => 'bi-megaphone-fill', 'title' => "Pengumuman Biasa #{$i}", 'content' => "Ini adalah isi dari pengumuman rutin nomor {$i}."];
        }

        return $pengumuman;
    }

    /**
     * Data untuk pemberitahuan 
     */
    public static function getPemberitahuan(): array
    {
        $pemberitahuan = [
            ['type' => 'danger', 'icon' => 'bi-exclamation-octagon', 'title' => 'Buku Akan Jatuh Tempo Besok', 'content' => 'Sejarah Indonesia Modern', 'badge' => 'Segera!'],
            ['type' => 'success', 'icon' => 'bi-check2-circle', 'title' => 'Peminjaman Berhasil', 'content' => 'Buku Kimia Dasar Berhasil Dipinjam', 'badge' => 'Baru'],
        ];

        // Buat 20 data dummy tambahan
        for ($i = 1; $i <= 20; $i++) {
            $pemberitahuan[] = ['type' => 'info', 'icon' => 'bi-bell-fill', 'title' => "Notifikasi Sistem #{$i}", 'content' => "Pemberitahuan sistem terjadwal nomor {$i}.", 'badge' => 'Info'];
        }

        return $pemberitahuan;
    }

    /**
     * Data untuk progress membaca (donut chart)
     */
    public static function getProgressMembaca(): array
    {
        return ['selesai' => 70, 'sisa' => 30];
    }

    /**
     * Data untuk statistik bulanan (bar chart)
     */
    public static function getStatistikBulanan(): array
    {
        return [
            'labels' => ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul'],
            'data' => [10, 15, 8, 20, 18, 25, 22],
        ];
    }

    /**
     * Master list untuk semua buku 
     * @return \Illuminate\Support\Collection
     */
    public static function getAllBooks()
    {
        return collect([
            // --- BUKU MILIK USER 1 (SILVI) ---
            [
                'id' => 1,
                'judul' => 'Modul Ajar IPAS',
                'penulis' => 'Tim Kemdikbud Ristek',
                'cover' => 'images/covers/ipas.jpg',
                'kode_buku' => '510',
                'kategori' => 'Sains',
                'tahun' => 2022,
                'status' => 'Dipinjam',
                'is_new' => true,
                'tipe_akses' => ['online', 'offline'],
                'sisa_hari' => -5,
                'user_id' => 1,
            ],
            [
                'id' => 2,
                'judul' => 'Perahu Kertas',
                'penulis' => 'Dewi Lestari',
                'cover' => 'images/covers/ayah.png',
                'kode_buku' => '844',
                'kategori' => 'Fiksi',
                'tahun' => 2012,
                'status' => 'Dipinjam',
                'is_new' => false,
                'tipe_akses' => 'offline',
                'sisa_hari' => 3,
                'user_id' => 1,
            ],

            // --- BUKU TERSEDIA (UNTUK CEK PEMINJAMAN BARU) ---
            [
                'id' => 3,
                'judul' => 'Si Anak Pintar',
                'penulis' => 'Tere Liye',
                'cover' => 'images/covers/sianakpintar.jpg',
                'kode_buku' => '843',
                'kategori' => 'Fiksi',
                'tahun' => 2018,
                'status' => 'Tersedia',
                'is_new' => true,
                'tipe_akses' => 'offline',
                'sisa_hari' => 0,
                'user_id' => null, 
            ],
            [
                'id' => 4,
                'judul' => 'Laskar Pelangi',
                'penulis' => 'Andrea Hirata',
                'cover' => 'https://upload.wikimedia.org/wikipedia/id/8/8e/Laskar_pelangi_sampul.jpg',
                'kode_buku' => 'NOV-001',
                'kategori' => 'Novel',
                'tahun' => 2005,
                'status' => 'Tersedia',
                'is_new' => false,
                'tipe_akses' => 'offline',
                'sisa_hari' => 0,
                'user_id' => null,
            ],
            [
                'id' => 5,
                'judul' => 'Filosofi Teras',
                'penulis' => 'Henry Manampiring',
                'cover' => 'https://upload.wikimedia.org/wikipedia/id/3/36/Filosofi_Teras.jpg',
                'kode_buku' => 'PSI-002',
                'kategori' => 'Psikologi',
                'tahun' => 2018,
                'status' => 'Tersedia',
                'is_new' => true,
                'tipe_akses' => 'offline',
                'sisa_hari' => 0,
                'user_id' => null,
            ],
            [
                'id' => 6,
                'judul' => 'Atomic Habits',
                'penulis' => 'James Clear',
                'cover' => 'https://images-na.ssl-images-amazon.com/images/I/91bYsX41DVL.jpg',
                'kode_buku' => 'SELF-003',
                'kategori' => 'Refleksi Diri',
                'tahun' => 2018,
                'status' => 'Tersedia',
                'is_new' => true,
                'tipe_akses' => ['offline', 'online'],
                'sisa_hari' => 0,
                'user_id' => null,
            ],
            [
                'id' => 7,
                'judul' => 'Bumi Manusia',
                'penulis' => 'Pramoedya Ananta Toer',
                'cover' => 'https://upload.wikimedia.org/wikipedia/id/4/44/Bumi_Manusia.jpg',
                'kode_buku' => 'SAS-004',
                'kategori' => 'Sastra',
                'tahun' => 1980,
                'status' => 'Tersedia',
                'is_new' => false,
                'tipe_akses' => 'offline',
                'sisa_hari' => 0,
                'user_id' => null,
            ],
            [
                'id' => 8,
                'judul' => 'Laut Bercerita',
                'penulis' => 'Leila S. Chudori',
                'cover' => 'https://upload.wikimedia.org/wikipedia/id/6/6d/Laut_Bercerita.jpeg',
                'kode_buku' => 'NOV-005',
                'kategori' => 'Novel',
                'tahun' => 2017,
                'status' => 'Tersedia',
                'is_new' => true,
                'tipe_akses' => 'offline',
                'sisa_hari' => 0,
                'user_id' => null,
            ],
            // --- BUKU MILIK USER 3 (SITI) - TELAT ---
            [
                'id' => 99,
                'judul' => 'Seni Berbicara',
                'penulis' => 'Larry King',
                'cover' => 'https://via.placeholder.com/150',
                'kode_buku' => 'COM-001',
                'kategori' => 'Refleksi Diri',
                'tahun' => 2019,
                'status' => 'Dipinjam',
                'is_new' => false,
                'tipe_akses' => 'offline',
                'sisa_hari' => -2,
                'user_id' => 3,
            ],

            // --- BUKU MILIK GURU (USER 5) - TESTING MANUAL BAN ---
            [
                'id' => 88,
                'judul' => 'Strategi Pembelajaran Abad 21',
                'penulis' => 'Prof. Dr. Pendidikan',
                'cover' => 'https://via.placeholder.com/150',
                'kode_buku' => 'GURU-001',
                'kategori' => 'Pendidikan',
                'tahun' => 2020,
                'status' => 'Dipinjam',
                'is_new' => false,
                'tipe_akses' => 'offline',
                'sisa_hari' => -3, 
                'user_id' => 5,
            ],
        ]);
    }


    /**
     * Data untuk buku pinjam offline 
     */
    public static function getBukuPinjamOffline($user): array
    {
        return self::getAllBooks()
            ->filter(function ($buku) {
                // Handle tipe akses string atau array
                if (is_array($buku['tipe_akses'])) {
                    return in_array('offline', $buku['tipe_akses']);
                }
                return $buku['tipe_akses'] === 'offline';
            })
            ->filter(function ($buku) use ($user) {
                if (!isset($buku['user_id']) || $buku['user_id'] === null)
                    return false;

                if (is_array($buku['user_id'])) {
                    return in_array($user->id, $buku['user_id']);
                }
                return $buku['user_id'] == $user->id;
            })
            ->map(fn($buku) => [
                'judul' => $buku['judul'],
                'penulis' => $buku['penulis'],
                'sisa_hari' => $buku['sisa_hari'],
                'cover' => $buku['cover'],
            ])
            ->values()
            ->all();
    }

    /**
     * Data untuk baca buku online
     */
    public static function getBacaBukuOnline($user): array
    {
        return self::getAllBooks()
            ->where('tipe_akses', 'online')
            ->filter(function ($buku) use ($user) {
                if (!isset($buku['user_id']))
                    return false;

                if (is_array($buku['user_id'])) {
                    return in_array($user->id, $buku['user_id']);
                }
                return $buku['user_id'] == $user->id;
            })
            ->map(fn($buku) => [
                'judul' => $buku['judul'],
                'penulis' => $buku['penulis'],
                'progress' => $buku['progress'],
                'cover' => $buku['cover'],
            ])
            ->values()
            ->all();
    }

    /**
     * Mengambil daftar buku untuk katalog dengan filter.
     */

    public static function getKatalogBuku(array $filters = []): \Illuminate\Support\Collection
    {
        $buku = self::getAllBooks();

        $buku = $buku->when($filters['search'] ?? null, function ($query, $search) {
            return $query->filter(fn($item) => str_contains(strtolower($item['judul']), strtolower($search)));
        })->when($filters['kategori'] ?? null, function ($query, $kategori) {
            return $query->where('kategori', $kategori);
        })->when($filters['tahun'] ?? null, function ($query, $tahun) {
            return $query->where('tahun', $tahun);
        })->when($filters['penulis'] ?? null, function ($query, $penulis) {
            return $query->where('penulis', $penulis);
        })
            ->when($filters['tipe_akses'] ?? null, function ($query, $tipe) {
                if ($tipe === 'offline') {
                    return $query->filter(function ($buku) {
                        return $buku['tipe_akses'] === 'offline' || (is_array($buku['tipe_akses']) && in_array('offline', $buku['tipe_akses']));
                    });
                }
                if ($tipe === 'online') {
                    return $query->filter(function ($buku) {
                        return $buku['tipe_akses'] === 'online' || (is_array($buku['tipe_akses']) && in_array('online', $buku['tipe_akses']));
                    });
                }
                return $query;
            })
            ->sortByDesc('status');

        return $buku;
    }

    /**
     * Method baru untuk mengambil daftar unik untuk dropdown filter
     */
    public static function getFilterOptions(): array
    {
        $buku = self::getAllBooks();
        return [
            'kategori' => $buku->pluck('kategori')->unique()->sort()->values(),
            'tahun' => $buku->pluck('tahun')->unique()->sortDesc()->values(),
            'penulis' => $buku->pluck('penulis')->unique()->sort()->values(),
        ];
    }

    /**
     * Data untuk riwayat peminjaman offline.
     * Setiap item mewakili satu transaksi peminjaman.
     */
    public static function getRiwayatOffline($user): array
    {
        $allBooks = self::getAllBooks();
        $myBooks = $allBooks->filter(function ($buku) use ($user) {
            if (is_array($buku['user_id'])) {
                return in_array($user->id, $buku['user_id']);
            }
            return $buku['user_id'] == $user->id;
        })->whereIn('status', ['Dipinjam', 'Dikembalikan', 'Terlambat']);

        // Mapping ke format tampilan View
        return $myBooks->map(function ($buku, $index) {

            // Logika Tanggal Dummy 
            $tglPinjam = Carbon::now()->subDays(7); 

            // Hitung tanggal kembali berdasarkan sisa hari di Master Data
            $tglKembali = Carbon::now()->addDays($buku['sisa_hari']);

            return [
                'id' => $index + 1,
                'id_peminjaman' => 'PIN-' . date('Ym') . '-' . sprintf('%03d', $buku['id']),
                'kode_buku' => $buku['kode_buku'],
                'judul_utama' => $buku['judul'],
                'tanggal_pinjam' => $tglPinjam->format('d/m/Y'),
                'tanggal_kembali' => $tglKembali->format('d/m/Y'),
                'status' => $buku['status'],
                'books' => [
                    [
                        'id' => $buku['id'],
                        'judul' => $buku['judul'],
                        'kode_buku' => $buku['kode_buku'],
                        'cover' => $buku['cover'],
                        'deskripsi' => 'Deskripsi buku ' . $buku['judul'],
                        'kategori' => $buku['kategori'],
                        'tahun' => $buku['tahun'],
                        'keterangan' => ($buku['sisa_hari'] < 0) ? 'Buku Terlambat' : null,
                    ]
                ]
            ];
        })->values()->toArray();
    }

    /**
     * Data untuk riwayat baca buku online.
     */
    public static function getRiwayatOnline(): array
    {
        return [
            [
                'id' => 1,
                'id_baca' => 'BCO-20240527-002',
                'judul_buku' => 'Ayah',
                'tanggal_akses' => '27/05/2024',
                'status' => 'Selesai',
                'books' => [
                    [
                        'id' => 9,
                        'judul' => 'Ayah',
                        'cover' => 'images/covers/ayah.png',
                        'deskripsi' => 'Novel yang mengisahkan perjuangan dan kasih sayang seorang ayah.',
                        'kategori' => 'Novel',
                        'tahun' => 2015,
                        'keterangan' => null
                    ]
                ]
            ],
        ];
    }

    /**
     * Data untuk notifikasi pengguna.
     * @param \App\Models\User $user Pengguna yang sedang login.
     * @return array Daftar notifikasi.
     */
    public static function getNotifikasiForUser($user): array
    {
        $notifikasi = [];
        $allBooks = self::getAllBooks();
        $myBooks = $allBooks->filter(function ($buku) use ($user) {
            if (!isset($buku['user_id']) || $buku['user_id'] === null) {
                return false;
            }

            if (is_array($buku['user_id'])) {
                return in_array($user->id, $buku['user_id']);
            }
            return $buku['user_id'] == $user->id;
        });

        foreach ($myBooks as $buku) {
            // LOGIC TELAT
            if ($buku['sisa_hari'] < 0 && $buku['status'] == 'Dipinjam') {
                $hariTelat = abs($buku['sisa_hari']);
                $denda = $hariTelat * 1000;

                $notifikasi[] = [
                    'icon' => 'bi-exclamation-octagon-fill',
                    'color' => 'danger',
                    'title' => 'TERLAMBAT: ' . $buku['judul'],
                    'content' => "Telat {$hariTelat} hari. Denda: Rp " . number_format($denda, 0, ',', '.'),
                    'time' => 'Sekarang',
                    'read' => false,
                    'type' => 'denda_active',
                    'link_id' => null,
                ];
            }
            // LOGIC JATUH TEMPO
            elseif ($buku['sisa_hari'] >= 0 && $buku['sisa_hari'] <= 3 && $buku['status'] == 'Dipinjam') {
                $notifikasi[] = [
                    'icon' => 'bi-exclamation-triangle-fill',
                    'color' => 'warning',
                    'title' => 'Jatuh Tempo: ' . $buku['judul'],
                    'content' => "Sisa waktu tinggal " . $buku['sisa_hari'] . " hari lagi.",
                    'time' => 'Segera',
                    'read' => false,
                    'type' => 'warning_jatuh_tempo',
                    'link_id' => null,
                ];
            }
        }

        // Notif Default
        $notifikasi[] = [
            'icon' => 'bi-info-circle-fill',
            'color' => 'primary',
            'title' => 'Selamat Datang di DigiPus!',
            'content' => 'Silakan jelajahi koleksi buku terbaru kami.',
            'time' => 'Baru saja',
            'read' => true,
            'type' => 'info',
            'link_id' => null,
        ];

        return $notifikasi;
    }
}
