using adas_core.Domain.Models.MongoModels; namespace adas_core.Domain.Utils; public static class DetailConfigExtension { // Método principal para iniciar la extracción public static List GetAllObservationNames(this CardDetailsConfig config) { if (config.NurseRows == null) return []; // Se usa el método auxiliar para recorrer todas las RowDetailsConfig var observationNames = ExtractNamesFromRows(config.NurseRows) .Distinct() // Opcional: para nombres únicos .ToList(); return observationNames; } // --- Auxiliar 1: Recorre la anidación de Filas (RowDetailsConfig) --- private static IEnumerable ExtractNamesFromRows(List rows) { foreach (var row in rows) { // 1. EXTRAER de las CELDAS (Cells) if (row.Cells != null) // Usar SelectMany para aplanar los resultados del método recursivo de Celdas foreach (var name in row.Cells.SelectMany(ExtractNamesFromCells)) yield return name; // 2. EXTRAER de las FILAS ANIDADAS (Rows) if (row.Rows != null) // Llamada recursiva: Volver a este mismo método para procesar las filas anidadas foreach (var name in ExtractNamesFromRows(row.Rows)) yield return name; } } // --- Auxiliar 2: Recorre la anidación de Celdas (CellDetails) --- private static IEnumerable ExtractNamesFromCells(CellDetails cell) { // 1. EXTRAER nombres del nivel actual if (cell.ObservationName != null) foreach (var name in cell.ObservationName) yield return name; // 2. EXTRAER de las CELDAS ANIDADAS (Cells) if (cell.Cells != null) // Llamada recursiva: Volver a este mismo método para procesar las celdas anidadas foreach (var name in cell.Cells.SelectMany(ExtractNamesFromCells)) yield return name; } }