using System; using System.IO; using System.Linq; using System.Text.Json; using GeViSetEditor.Core.Parsers; namespace GeViSetEditor.CLI.Commands { /// /// Parse ALL configuration data comprehensively /// public static class ComprehensiveParseCommand { public static void Execute(string inputPath, string? outputJsonPath = null) { if (!File.Exists(inputPath)) { Console.WriteLine($"ERROR: File not found: {inputPath}"); return; } try { // Read file byte[] data = File.ReadAllBytes(inputPath); Console.WriteLine($"Input: {inputPath}"); Console.WriteLine($"Size: {data.Length:N0} bytes"); // Parse with comprehensive parser var parser = new ComprehensiveConfigParser(); var config = parser.Parse(data); // Show sample properties Console.WriteLine($"\n=== Sample Properties (first 20) ==="); foreach (var prop in config.Properties.Take(20)) { string valueStr = prop.Value?.ToString() ?? "null"; if (valueStr.Length > 50) valueStr = valueStr.Substring(0, 47) + "..."; Console.WriteLine($" {prop.Name} = {valueStr} ({prop.ValueType})"); } if (config.Properties.Count() > 20) Console.WriteLine($" ... and {config.Properties.Count() - 20} more properties"); // Show Rules sections Console.WriteLine($"\n=== Rules Sections (first 5) ==="); foreach (var rules in config.RulesSections.Take(5)) { if (rules.Value is List actions) { Console.WriteLine($"\nRules at offset {rules.StartOffset}:"); Console.WriteLine($" Actions: {actions.Count}"); foreach (var action in actions.Take(3)) { Console.WriteLine($" - {action}"); } if (actions.Count > 3) Console.WriteLine($" ... and {actions.Count - 3} more actions"); } } // Export to JSON if requested if (!string.IsNullOrEmpty(outputJsonPath)) { Console.WriteLine($"\n=== Exporting to JSON ==="); var options = new JsonSerializerOptions { WriteIndented = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase, Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }; string json = JsonSerializer.Serialize(config, options); File.WriteAllText(outputJsonPath, json); Console.WriteLine($"JSON written to: {outputJsonPath}"); Console.WriteLine($"JSON size: {json.Length:N0} characters ({json.Length / 1024:N0} KB)"); } Console.WriteLine("\n✓ Comprehensive parsing complete!"); } catch (Exception ex) { Console.WriteLine($"\n✗ ERROR: {ex.Message}"); Console.WriteLine($"Stack trace:\n{ex.StackTrace}"); } } } }