namespace NResLib;
///
/// Архив NRes (файл NRes)
///
public record NResArchive(NResArchiveHeader Header, List Files);
///
/// Заголовок файла
///
/// [0..4] ASCII NRes.
/// [4..8] Версия кодировщика, обычно 0x100.
/// [8..12] Количество записей каталога.
/// [12..16] Длина всего архива.
public record NResArchiveHeader(string NRes, int Version, int FileCount, int TotalFileLengthBytes);
///
/// 64-байтная запись каталога NRes.
///
/// Важный нюанс RE-имен:
/// - ElementCount/Magic1/ElementSize оставлены как удобные имена для исследования, но на уровне
/// общего NRes-контейнера это attr1/attr2/attr3. Их смысл зависит от TypeId ресурса.
/// - FileName на диске занимает 36 байт: [20..56]. Старый разбор читал только [20..40].
/// - Старые Magic3..Magic6 оказались не отдельными полями формата, а байтами хвоста name_raw.
/// - SortIndex на диске это перестановка для бинарного поиска по имени, а не порядковый
/// индекс записи каталога. Порядковый индекс хранится отдельно в DirectoryIndex.
///
/// [0x00..0x04] Resource type id.
/// [0x00..0x04] Resource type id как ASCII или hex bytes для RE.
/// [0x04..0x08] ElementCount. смысл зависит от TypeId.
/// [0x08..0x0C] смысл зависит от TypeId.
/// [0x0C..0x10] Длина payload в байтах.
/// [0x10..0x14] ElementSize. смысл зависит от TypeId.
/// [0x14..0x38] C-string из 36-байтного name_raw.
/// [0x38..0x3C] Смещение payload от начала архива.
/// [0x3C..0x40] Индекс перестановки для бинарного поиска по имени.
/// Индекс записи в порядке каталога; не хранится отдельным полем NRes.
public sealed record class ListMetadataItem(
uint TypeId,
string FileType,
uint ElementCount,
int Magic1,
int FileLength,
int ElementSize,
string FileName,
int OffsetInFile,
int SortIndex,
int DirectoryIndex);