import { Tool } from "@modelcontextprotocol/sdk/types.js";
import { ListMessagesArgsSchema, ListMessagesArgs } from "../../schemas/upwork.js";
import { UpworkClient } from "../../services/upwork-client.js";

export const listMessagesToolDefinition: Tool = {
  name: "upwork_list_messages",
  description: "List messages and conversations",
  inputSchema: {
    type: "object",
    properties: {
      thread_id: { type: "string", description: "Filter by conversation thread" },
      unread_only: { type: "boolean", default: false, description: "Show only unread messages" },
      page: { type: "number", minimum: 1, default: 1, description: "Page number" },
      limit: { type: "number", minimum: 1, maximum: 100, default: 20, description: "Results per page" }
    }
  }
};

export async function listMessagesHandler(args: unknown, upworkClient: UpworkClient) {
  const validatedArgs = ListMessagesArgsSchema.parse(args);
  
  try {
    const params = new URLSearchParams();
    if (validatedArgs.thread_id) params.append('thread_id', validatedArgs.thread_id);
    if (validatedArgs.unread_only) params.append('unread_only', 'true');
    params.append('page', validatedArgs.page.toString());
    params.append('count', validatedArgs.limit.toString());

    const response = await upworkClient.getClient().get(`/messages/v3/rooms?${params.toString()}`);
    
    return {
      content: [
        {
          type: "text",
          text: JSON.stringify({
            success: true,
            messages: response.data.rooms || response.data.messages || [],
            total: response.data.total || 0,
            page: validatedArgs.page,
            limit: validatedArgs.limit
          }, null, 2)
        }
      ]
    };
  } catch (error) {
    throw upworkClient.handleError(error);
  }
}

export const listMessagesTool = {
  definition: listMessagesToolDefinition,
  handler: listMessagesHandler,
  schema: ListMessagesArgsSchema
};