package daemon

import "encoding/json"

func (client *clientState) deliverAckTracker() *RequestTracker[deliverAckResult] {
	return NewRequestTrackerWithStore[deliverAckResult](&client.mu, &client.deliverAcks)
}

func (client *clientState) fileContentTracker() *RequestTracker[fileContentResult] {
	return NewRequestTrackerWithStore[fileContentResult](&client.mu, &client.readRequests)
}

func (client *clientState) reviewSummaryTracker() *RequestTracker[reviewSummaryResult] {
	return NewRequestTrackerWithStore[reviewSummaryResult](&client.mu, &client.reviewSummaryRequests)
}

func (client *clientState) reviewFilesTracker() *RequestTracker[reviewFilesResult] {
	return NewRequestTrackerWithStore[reviewFilesResult](&client.mu, &client.reviewFilesRequests)
}

func (client *clientState) reviewDiffTracker() *RequestTracker[reviewDiffResult] {
	return NewRequestTrackerWithStore[reviewDiffResult](&client.mu, &client.reviewDiffRequests)
}

func (client *clientState) outputTargetValidateTracker() *RequestTracker[outputTargetValidateResult] {
	return NewRequestTrackerWithStore[outputTargetValidateResult](&client.mu, &client.validateTargetRequests)
}

func (client *clientState) trajectoryHistoryTracker() *RequestTracker[trajectoryHistoryResult] {
	return NewRequestTrackerWithStore[trajectoryHistoryResult](&client.mu, &client.trajectoryRequests)
}

func (client *clientState) restoreRecoveryPointTracker() *RequestTracker[restoreRecoveryPointResult] {
	return NewRequestTrackerWithStore[restoreRecoveryPointResult](&client.mu, &client.restoreRequests)
}

func (client *clientState) applySeedFilesTracker() *RequestTracker[applySeedFilesResult] {
	return NewRequestTrackerWithStore[applySeedFilesResult](&client.mu, &client.applySeedRequests)
}

func (client *clientState) deleteWorkspacePathTracker() *RequestTracker[deleteWorkspacePathResult] {
	return NewRequestTrackerWithStore[deleteWorkspacePathResult](&client.mu, &client.deleteRequests)
}

func (client *clientState) remoteRequestTracker() *RequestTracker[RemoteRequestResult[json.RawMessage]] {
	return NewRequestTrackerWithStore[RemoteRequestResult[json.RawMessage]](&client.mu, &client.remoteRequests)
}
