validateSurahStructure static method

void validateSurahStructure(
  1. Map<String, dynamic> surah,
  2. int expectedId
)

Validate individual surah structure

Implementation

static void validateSurahStructure(
    Map<String, dynamic> surah, int expectedId) {
  final requiredFields = [
    'id',
    'name',
    'englishName',
    'revelationType',
    'numberOfAyahs',
    'revelationOrder',
    'ayat'
  ];

  for (final field in requiredFields) {
    if (!surah.containsKey(field)) {
      throw ArgumentError('Surah missing required field: $field');
    }
  }

  // Validate specific fields
  final id = surah['id'];
  if (id != expectedId) {
    throw ArgumentError('Expected surah ID $expectedId, got: $id');
  }

  validateRevelationType(surah['revelationType']);
  validateRevelationOrder(surah['revelationOrder']);

  final numberOfAyahs = surah['numberOfAyahs'];
  validateNumberOfAyahs(numberOfAyahs);

  final ayat = surah['ayat'];
  if (ayat is! List) {
    throw ArgumentError('ayat must be a list');
  }

  if (ayat.length != numberOfAyahs) {
    throw ArgumentError(
        'ayat list length (${ayat.length}) must match numberOfAyahs ($numberOfAyahs)');
  }

  // Validate each ayah
  for (int i = 0; i < ayat.length; i++) {
    final ayah = ayat[i];
    if (ayah is! Map<String, dynamic>) {
      throw ArgumentError('Ayah at index $i must be a map');
    }

    validateAyahStructure(ayah, i + 1);
  }
}