import type { CanonicalToolCall } from "../../model/index.js";
import type { PilotDeckToolErrorResult, PilotDeckToolResult } from "../../tool/index.js";

export function ensureToolResultPairing(
  calls: CanonicalToolCall[],
  results: PilotDeckToolResult[],
  now: () => Date = () => new Date(),
  message = "Tool execution did not produce a result.",
): PilotDeckToolResult[] {
  const resultsByCallId = new Map(results.map((result) => [result.toolCallId, result]));
  const paired: PilotDeckToolResult[] = [];

  for (const call of calls) {
    paired.push(resultsByCallId.get(call.id) ?? createMissingToolResult(call, now, message));
  }

  return paired;
}

export function createMissingToolResult(
  call: CanonicalToolCall,
  now: () => Date = () => new Date(),
  message = "Tool execution did not produce a result.",
): PilotDeckToolErrorResult {
  const timestamp = now().toISOString();
  return {
    type: "error",
    toolCallId: call.id,
    toolName: call.name,
    error: {
      code: "tool_execution_failed",
      message,
    },
    content: [{ type: "text", text: message }],
    startedAt: timestamp,
    completedAt: timestamp,
  };
}