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

export const releaseMilestoneToolDefinition: Tool = {
  name: "upwork_release_milestone",
  description: "Release a milestone payment (for clients)",
  inputSchema: {
    type: "object",
    properties: {
      milestone_id: { type: "string", description: "Milestone ID" },
      rating: { type: "number", minimum: 1, maximum: 5, description: "Rating (1-5 stars)" },
      feedback: { type: "string", description: "Feedback text" }
    },
    required: ["milestone_id", "rating"]
  }
};

export async function releaseMilestoneHandler(args: unknown, upworkClient: UpworkClient) {
  const validatedArgs = ReleaseMilestoneArgsSchema.parse(args);
  
  try {
    const releaseData = {
      rating: validatedArgs.rating,
      feedback: validatedArgs.feedback
    };

    const response = await upworkClient.getClient().put(`/hr/v2/milestones/${validatedArgs.milestone_id}/release`, releaseData);
    
    return {
      content: [
        {
          type: "text",
          text: JSON.stringify({
            success: true,
            milestone: response.data,
            message: "Milestone released successfully"
          }, null, 2)
        }
      ]
    };
  } catch (error) {
    throw upworkClient.handleError(error);
  }
}

export const releaseMilestoneTool = {
  definition: releaseMilestoneToolDefinition,
  handler: releaseMilestoneHandler,
  schema: ReleaseMilestoneArgsSchema
};