import { ChatMessage, ChatOptions, ProviderResponse as GlobalProviderResponse } from '../../../types/chat';
import { Tool as GlobalTool, StandardizedToolCall } from '../../../types/tool';
import { ILogger } from '../../../types/common';

export interface AnthropicProviderConfig {
  apiKey: string;
  model: string;
}

export interface AnthropicConfig extends AnthropicProviderConfig {
  logger: ILogger;
  getApiUrl: () => string;
}

export interface AnthropicChatRequestBody {
  model: string;
  messages: AnthropicMessage[];
  max_tokens?: number;
  temperature?: number;
  stream?: boolean;
  system?: string;
  tools?: AnthropicToolSchema[];
}

export interface AnthropicMessage {
  role: 'user' | 'assistant' | 'system';
  content: string | AnthropicMessageContent[];
}

export type AnthropicMessageContent = AnthropicTextContent | AnthropicToolUseContent;

export interface AnthropicTextContent {
  type: 'text';
  text: string;
}

export interface AnthropicToolUseContent {
  type: 'tool_use';
  id: string;
  name: string;
  input: Record<string, any>;
}

export interface AnthropicChatResponse {
  id: string;
  type: 'message';
  role: 'assistant';
  model: string;
  content: AnthropicMessageContent[];
  stop_reason: string | null;
  stop_sequence: string | null;
  usage: {
    input_tokens: number;
    output_tokens: number;
  };
}

export interface AnthropicToolSchema {
  name: string;
  description?: string;
  input_schema: {
    type: string;
    properties: {
      [key: string]: {
        type: string;
        description?: string;
        enum?: string[];
      };
    };
    required: string[];
  };
}

export type Tool = GlobalTool;

export type ProviderResponse = GlobalProviderResponse;

export type AnthropicCacheKey = {
  messages: ChatMessage[];
  options: ChatOptions;
  tools?: Tool[];
};