import { Injectable } from '@nestjs/common';
import { ToolExecutionResult, ToolDefinition, ToolContext } from './tool.types';
import { EverdigmMailClient } from '../../outbound/everdigm-mail/everdigm-mail.client';

type EverdigmSpamDetailArgs = {
  mid: string;
};

@Injectable()
export class EverdigmMailSpamDetailUsecase {
  constructor(private readonly everdigmMailClient: EverdigmMailClient) {}

  definition(): ToolDefinition {
    return {
      name: 'everdigm_mail.spam_detail',
      description: 'Fetch Everdigm mail spam detail by mid from the API.',
      inputSchema: {
        type: 'object',
        properties: {
          mid: { type: 'string', description: 'Mail mid value.' },
        },
        required: ['mid'],
        additionalProperties: false,
      },
      handler: async (args, context) => this.execute(args, context),
    };
  }

  async execute(args: unknown, _context: ToolContext): Promise<ToolExecutionResult> {
    const typedArgs = (args ?? {}) as EverdigmSpamDetailArgs;

    try {
      const payload = await this.everdigmMailClient.fetchSpamDetail(typedArgs.mid);
      return {
        output: [
          {
            kind: 'text',
            text: JSON.stringify(payload, null, 2),
          },
        ],
        isError: false,
      };
    } catch (error) {
      const details = error instanceof Error ? error.message : String(error);
      return {
        output: [{ kind: 'text', text: `everdigm_mail.spam_detail failed: ${details}` }],
        isError: true,
      };
    }
  }
}
