/** Merge adjacent same-role turns; Anthropic expects alternating user/assistant. */
export function normalizeAnthropicMessages(
  msgs: Array<{ role: 'user' | 'assistant'; content: string }>,
): Array<{ role: 'user' | 'assistant'; content: string }> {
  const out: Array<{ role: 'user' | 'assistant'; content: string }> = [];
  for (const m of msgs) {
    const last = out.at(-1);
    if (last?.role === m.role) last.content = `${last.content}\n\n${m.content}`;
    else out.push({ role: m.role, content: m.content });
  }
  if (out.length && out[0].role === 'assistant') {
    out.unshift({ role: 'user', content: '(continued conversation)' });
  }
  return out;
}

/** Serializable body for Anthropic Messages API (for tests / debugging). */
export function buildAnthropicRequestBody(opts: {
  model: string;
  system: string;
  messages: Array<{ role: 'user' | 'assistant'; content: string }>;
  maxTokens: number;
}): Record<string, unknown> {
  return {
    model: opts.model,
    max_tokens: opts.maxTokens,
    system: opts.system,
    messages: normalizeAnthropicMessages(opts.messages).map(m => ({
      role: m.role,
      content: m.content,
    })),
  };
}
