using System; using System.Threading.Tasks; using AI.AgentIntegration; namespace PcgDrawR.Services { /// /// 负责导航、系统状态以及与界面相关的通用操作。 /// public class NavigationService { private readonly IAppEnvironment env; public NavigationService(IAppEnvironment env) { this.env = env ?? throw new ArgumentNullException(nameof(env)); } public Task DescribeStateAsync(AppAction action) { var state = env.State; string message = $"Current view: {state.Navigation.CurrentView}, " + $"Active tab: {state.UI.ActiveTab ?? "None"}, " + $"Unsaved changes: {state.File.HasUnsavedChanges}"; return Task.FromResult(Success(message)); } public Task SetBusyAsync(AppAction action) { if (action.Parameters.TryGetValue("isBusy", out var busyObj)) { env.State.System.IsBusy = Convert.ToBoolean(busyObj); } return Task.FromResult(Success()); } public Task NavigateAsync(AppAction action) { if (action.Parameters.TryGetValue("view", out var viewObj)) { string view = viewObj.ToString(); env.State.Navigation.NavigationStack.Add(env.State.Navigation.CurrentView); env.State.Navigation.CurrentView = view; } return Task.FromResult(Success()); } public Task NavigateBackAsync(AppAction action) { var stack = env.State.Navigation.NavigationStack; if (stack.Count == 0) { return Task.FromResult(Fail("没有可以后退的历史记录")); } string prev = stack[stack.Count - 1]; stack.RemoveAt(stack.Count - 1); env.State.Navigation.CurrentView = prev; return Task.FromResult(Success()); } public Task NavigateForwardAsync(AppAction action) { // 前进导航需要维护一个前进栈,此处仍然保留桩实现 return Task.FromResult(Success()); } public Task GetOpenTabsAsync(AppAction action) { // 同步一次当前 UI 状态,避免依赖外部调用 GetCurrentState env.State.UI.OpenTabs = env.MainForm.OpenTabs; env.State.UI.ActiveTab = env.MainForm.ActivateTab; return Task.FromResult(Success(env.State.UI.OpenTabs)); } public Task RefreshAsync(AppAction action) { env.MainForm.Invoke(() => env.MainForm.Refresh()); return Task.FromResult(Success()); } public Task ExitAsync(AppAction action) { env.MainForm.Invoke(() => env.MainForm.Close()); return Task.FromResult(Success()); } private AppActionResult Success(object data = null) { return new AppActionResult { Success = true, Data = data }; } private AppActionResult Fail(string message) { return new AppActionResult { Success = false, Message = message }; } } }