loadQuranDataV3 method

Future<void> loadQuranDataV3()

-------- Methods ----------

Implementation

// Future<void> _initSearch() async {
//   quranSearch = QuranSearch(ayahs); // تأكد من أن `ayahs` محملة مسبقًا
//   await quranSearch.loadModel(); // تحميل نموذج BERT
// }

Future<void> loadQuranDataV3() async {
  lastPage = _quranRepository.getLastPage() ?? 1;
  state.currentPageNumber.value = lastPage;
  if (lastPage != 0) {
    jumpToPage(lastPage - 1);
  }
  if (surahs.isEmpty) {
    List<dynamic> surahsJson = await _quranRepository.getQuranDataV3();
    surahs =
        surahsJson.map((s) => SurahModel.fromDownloadedFontsJson(s)).toList();

    // مزامنة القوائم على مستوى الـ instance مع state لتجنب القوائم الفارغة
    // surahs.addAll(surahs);

    for (final surah in surahs) {
      // نقل بيانات السورة إلى كل آية حتى يعمل البحث بشكل صحيح
      for (final ayah in surah.ayahs) {
        ayah.surahNumber ??= surah.surahNumber;
        ayah.arabicName ??= surah.arabicName;
        ayah.englishName ??= surah.englishName;
      }
      state.allAyahs.addAll(surah.ayahs);
    }

    // مزامنة قائمة الآيات على مستوى الـ instance
    ayahs.addAll(state.allAyahs);
    List.generate(604, (pageIndex) {
      state.pages.add(state.allAyahs
          .where((ayah) => ayah.page == pageIndex + 1)
          .toList());
    });
    state.isQuranLoaded = true;
    _buildAyahUqIndexIfNeeded();

    // تحميل كسول لملفات QPC v4 فقط عند تفعيل الخط المحمّل (code v4)
    if (isQpcV4Enabled) {
      // لا ننتظر هنا لتجنب إبطاء init في الحالات الأخرى.
      Future(() => _ensureQpcV4AssetsLoaded());
    }
    // log('Pages Length: ${state.pages.length}', name: 'Quran Controller');
  }
}