import { type coresdk } from '@temporalio/proto';
import { type SinkCall } from '@temporalio/workflow/lib/sinks';

/**
 * An activation completion.
 *
 * Used as response to an `ActivateWorkflow` request.
 */
export interface ActivationCompletion {
  type: 'activation-completion';
  completion: coresdk.workflow_completion.IWorkflowActivationCompletion | Uint8Array;
}

/**
 * Response to a `ExtractSinkCalls` request.
 */
export interface SinkCallList {
  type: 'sink-calls';
  calls: SinkCall[];
}

export type WorkerThreadOutput = ActivationCompletion | SinkCallList | undefined;

/**
 * Successful result for a given request
 */
export interface WorkerThreadOkResult {
  type: 'ok';
  output?: WorkerThreadOutput;
}

/**
 * Error result for a given request
 */
export interface WorkflowThreadErrorResult {
  type: 'error';
  /** Error class name */
  name: string;
  message: string;
  stack: string;
}

/**
 * Response to a WorkerThreadRequest.
 */
export interface WorkerThreadResponse {
  /**
   * ID provided in the originating `WorkerThreadRequest`
   */
  requestId: bigint;

  result: WorkerThreadOkResult | WorkflowThreadErrorResult;
}
