getAyahUQsForSurahAyahRange method
إرجاع أرقام UQ لكل الآيات ضمن نطاق عبر السور، مثل 2:15-3:25 (شامل)
Implementation
List<int> getAyahUQsForSurahAyahRange({
required int startSurah,
required int startAyah,
required int endSurah,
required int endAyah,
}) {
// تصحيح الترتيب إذا كان البداية بعد النهاية
bool swapNeeded = (startSurah > endSurah) ||
(startSurah == endSurah && startAyah > endAyah);
int sSurah = swapNeeded ? endSurah : startSurah;
int sAyah = swapNeeded ? endAyah : startAyah;
int eSurah = swapNeeded ? startSurah : endSurah;
int eAyah = swapNeeded ? startAyah : endAyah;
// ضبط الحدود ضمن المدى الصحيح للسور
sSurah = sSurah.clamp(1, surahs.isEmpty ? 114 : surahs.length);
eSurah = eSurah.clamp(1, surahs.isEmpty ? 114 : surahs.length);
final result = <int>{};
for (int s = sSurah; s <= eSurah; s++) {
SurahModel? surah;
try {
surah = surahs.firstWhere((x) => x.surahNumber == s);
} catch (_) {
surah = null;
}
if (surah == null || surah.ayahs.isEmpty) continue;
final int firstAyah = (s == sSurah) ? sAyah : 1;
final int lastAyah = (s == eSurah)
? eAyah
: surah.ayahs.last.ayahNumber; // آخر آية في السورة
final int from = firstAyah.clamp(1, surah.ayahs.last.ayahNumber);
final int to = lastAyah.clamp(1, surah.ayahs.last.ayahNumber);
for (final a in surah.ayahs) {
if (a.ayahNumber >= from && a.ayahNumber <= to) {
result.add(a.ayahUQNumber);
}
}
}
return result.toList();
}