var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
    return function (target, key) { decorator(target, key, paramIndex); }
};
import { injectable, inject } from 'tsyringe';
let AutoTriageIntakeItemUseCase = class AutoTriageIntakeItemUseCase {
    intakeRepo;
    agentProvider;
    constructor(intakeRepo, agentProvider) {
        this.intakeRepo = intakeRepo;
        this.agentProvider = agentProvider;
    }
    async execute(input) {
        const item = await this.intakeRepo.findById(input.intakeItemId);
        if (!item) {
            return { ok: false, error: `Intake item not found: "${input.intakeItemId}"` };
        }
        try {
            const executor = await this.agentProvider.getExecutor();
            const prompt = [
                'Analyze the following intake item and suggest triage classification.',
                'Return a JSON object with these fields:',
                '- suggestedPriority: one of "Urgent", "High", "Medium", "Low", "None"',
                '- suggestedLabels: array of label strings',
                '- triageNotes: brief analysis of the item',
                '',
                `Title: ${item.title}`,
                item.description ? `Description: ${item.description}` : '',
                `Source: ${item.source}`,
            ]
                .filter(Boolean)
                .join('\n');
            const result = await executor.execute(prompt, {
                outputSchema: {
                    type: 'object',
                    properties: {
                        suggestedPriority: { type: 'string' },
                        suggestedLabels: { type: 'array', items: { type: 'string' } },
                        triageNotes: { type: 'string' },
                    },
                },
            });
            const suggestions = JSON.parse(result.result);
            await this.intakeRepo.update(item.id, {
                suggestedPriority: suggestions.suggestedPriority,
                suggestedLabels: suggestions.suggestedLabels
                    ? JSON.stringify(suggestions.suggestedLabels)
                    : undefined,
                triageNotes: suggestions.triageNotes,
                suggestedStateId: suggestions.suggestedStateId,
                suggestedAssigneeId: suggestions.suggestedAssigneeId,
            });
            return { ok: true, suggestions };
        }
        catch (error) {
            const message = error instanceof Error ? error.message : String(error);
            return { ok: false, error: `AI triage failed: ${message}` };
        }
    }
};
AutoTriageIntakeItemUseCase = __decorate([
    injectable(),
    __param(0, inject('IIntakeItemRepository')),
    __param(1, inject('IAgentExecutorProvider')),
    __metadata("design:paramtypes", [Object, Object])
], AutoTriageIntakeItemUseCase);
export { AutoTriageIntakeItemUseCase };
