using System.ComponentModel;
using ClaudeDo.Data.Models;
using ClaudeDo.Data.Repositories;
using ClaudeDo.Ui.Services;
using TaskStatus = ClaudeDo.Data.Models.TaskStatus;
namespace ClaudeDo.Ui.Tests;
///
/// No-op base for tests. Override only the members a
/// test actually exercises; everything else returns a benign default. Keeping the
/// full interface surface here means new interface members only break this file.
///
public abstract class StubWorkerClient : IWorkerClient
{
#pragma warning disable CS0067 // interface-mandated events; tests don't raise them
public event PropertyChangedEventHandler? PropertyChanged;
public event Action? TaskStartedEvent;
public event Action? TaskFinishedEvent;
public event Action? TaskUpdatedEvent;
public event Action? ConnectionRestoredEvent;
public event Action? WorktreeUpdatedEvent;
public event Action? ListUpdatedEvent;
public event Action? TaskMessageEvent;
public event Action? PrepStartedEvent;
public event Action? PrepLineEvent;
public event Action? PrepFinishedEvent;
public event Action? PlanningMergeStartedEvent;
public event Action? PlanningSubtaskMergedEvent;
public event Action>? PlanningMergeConflictEvent;
public event Action? PlanningMergeAbortedEvent;
public event Action? PlanningCompletedEvent;
#pragma warning restore CS0067
public int ClearMyDayCalls { get; private set; }
public int RunDailyPrepNowCalls { get; private set; }
public void RaisePrepStarted() => PrepStartedEvent?.Invoke();
public void RaisePrepLine(string line) => PrepLineEvent?.Invoke(line);
public void RaisePrepFinished(bool ok) => PrepFinishedEvent?.Invoke(ok);
public virtual bool IsConnected => false;
public virtual Task WakeQueueAsync() => Task.CompletedTask;
public virtual Task RunNowAsync(string taskId) => Task.CompletedTask;
public virtual Task ContinueTaskAsync(string taskId, string followUpPrompt) => Task.CompletedTask;
public virtual Task ResetTaskAsync(string taskId) => Task.CompletedTask;
public virtual Task CancelTaskAsync(string taskId) => Task.CompletedTask;
public virtual Task> GetAgentsAsync() => Task.FromResult(new List());
public virtual Task GetListConfigAsync(string listId) => Task.FromResult(null);
public virtual Task UpdateTaskAgentSettingsAsync(UpdateTaskAgentSettingsDto dto) => Task.CompletedTask;
public virtual Task SetTaskStatusAsync(string taskId, TaskStatus status) => Task.CompletedTask;
public virtual Task ApproveReviewAsync(string taskId) => Task.CompletedTask;
public virtual Task RejectReviewToQueueAsync(string taskId, string feedback) => Task.CompletedTask;
public virtual Task RejectReviewToIdleAsync(string taskId) => Task.CompletedTask;
public virtual Task CancelReviewAsync(string taskId) => Task.CompletedTask;
public virtual Task StartPlanningSessionAsync(string taskId, CancellationToken ct = default) => Task.CompletedTask;
public virtual Task OpenInteractiveTerminalAsync(string taskId, CancellationToken ct = default) => Task.CompletedTask;
public virtual Task ResumePlanningSessionAsync(string taskId, CancellationToken ct = default) => Task.CompletedTask;
public virtual Task DiscardPlanningSessionAsync(string taskId, bool dequeueQueuedChildren = false, CancellationToken ct = default)
=> Task.FromResult(new DiscardPlanningOutcome(DiscardPlanningResult.Discarded, 0, 0));
public virtual Task FinalizePlanningSessionAsync(string taskId, bool queueAgentTasks = true, CancellationToken ct = default) => Task.CompletedTask;
public virtual Task GetPendingDraftCountAsync(string taskId, CancellationToken ct = default) => Task.FromResult(0);
public virtual Task GetMergeTargetsAsync(string taskId) => Task.FromResult(null);
public virtual Task> GetPlanningAggregateAsync(string planningTaskId)
=> Task.FromResult>(Array.Empty());
public virtual Task BuildPlanningIntegrationBranchAsync(string planningTaskId, string targetBranch)
=> Task.FromResult(null);
public virtual Task MergeAllPlanningAsync(string planningTaskId, string targetBranch) => Task.CompletedTask;
public virtual Task ContinuePlanningMergeAsync(string planningTaskId) => Task.CompletedTask;
public virtual Task AbortPlanningMergeAsync(string planningTaskId) => Task.CompletedTask;
public virtual Task QueuePlanningSubtasksAsync(string parentTaskId, CancellationToken ct = default) => Task.CompletedTask;
public virtual Task GetWeekReportAsync(DateOnly start, DateOnly end) => Task.FromResult(null);
public virtual Task GenerateWeekReportAsync(DateOnly start, DateOnly end) => Task.FromResult("");
public virtual Task RunDailyPrepNowAsync() { RunDailyPrepNowCalls++; return Task.FromResult(false); }
public virtual Task ClearMyDayAsync() { ClearMyDayCalls++; return Task.CompletedTask; }
public virtual Task GetAppSettingsAsync() => Task.FromResult(null);
public virtual Task> GetDailyNotesAsync(DateOnly day) => Task.FromResult(new List());
public virtual Task AddDailyNoteAsync(DateOnly day, string text) => Task.FromResult(null);
public virtual Task UpdateDailyNoteAsync(string id, string text) => Task.CompletedTask;
public virtual Task DeleteDailyNoteAsync(string id) => Task.CompletedTask;
public string LastPrepLog = "";
public virtual Task GetLastPrepLogAsync() => Task.FromResult(LastPrepLog);
protected void RaisePropertyChanged(string name) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}