using System.Threading.Tasks; using Spectre.Console; using Toak.Configuration; namespace Toak.Commands; public static class ConfigUpdaterCommand { public static async Task ExecuteAsync(string key, string val, bool verbose) { Toak.Core.Logger.Verbose = verbose; var config = ConfigManager.LoadConfig(); key = key.ToLowerInvariant(); val = val.ToLowerInvariant(); switch (key) { case "llm": config.LlmModel = val; break; case "whisper": config.WhisperModel = val; break; case "style": if (val == "professional" || val == "concise" || val == "casual") { config.StyleMode = val; } else { AnsiConsole.MarkupLine("[red]Invalid style.[/] Use: professional, concise, casual"); return; } break; case "language": case "lang": config.WhisperLanguage = val; break; case "backend": config.TypingBackend = val; break; case "punctuation": if (bool.TryParse(val, out var p)) { config.ModulePunctuation = p; } else { AnsiConsole.MarkupLine("[red]Invalid value. Use true or false.[/]"); return; } break; case "tech": if (bool.TryParse(val, out var t)) { config.ModuleTechnicalSanitization = t; } else { AnsiConsole.MarkupLine("[red]Invalid value. Use true or false.[/]"); return; } break; case "bullets": if (bool.TryParse(val, out var b)) { config.StructureBulletPoints = b; } else { AnsiConsole.MarkupLine("[red]Invalid value. Use true or false.[/]"); return; } break; case "paragraphs": if (bool.TryParse(val, out var sp)) { config.StructureSmartParagraphing = sp; } else { AnsiConsole.MarkupLine("[red]Invalid value. Use true or false.[/]"); return; } break; default: AnsiConsole.MarkupLine($"[red]Unknown config key: {key}[/]"); return; } ConfigManager.SaveConfig(config); AnsiConsole.MarkupLine($"[green]Successfully[/] set {key} to [blue]{val}[/]."); } }