import { StructuredTool, ToolRunnableConfig } from '@langchain/core/tools';
import { z } from 'zod';
import { CallbackManagerForToolRun } from '@langchain/core/callbacks/manager';
import { getSupabaseClient } from '../supabaseClient';

export class SupportContextTool extends StructuredTool {
    name = 'get_support_context';
    description = 'Получает последние 10 сообщений из истории поддержки для понимания контекста разговора. Используй этот инструмент в начале разговора.';
    
    schema = z.object({});

    private userId: string;

    constructor(userId: string) {
        super();
        this.userId = userId;
    }

    protected async _call(
        arg: z.infer<typeof this.schema>, 
        runManager?: CallbackManagerForToolRun, 
        parentConfig?: ToolRunnableConfig<Record<string, any>>
    ): Promise<string> {
        try {
            const supabase = getSupabaseClient();
            
            const { data: messages, error } = await supabase
                .from('support')
                .select('message, is_from_user, created_at')
                .eq('user_id', this.userId)
                .order('created_at', { ascending: false })
                .limit(10);
            
            if (error) {
                return 'Не удалось получить историю сообщений.';
            }

            if (!messages || messages.length === 0) {
                return 'История сообщений поддержки пуста. Это первое обращение пользователя.';
            }

            const chronologicalMessages = messages.reverse();
            
            const contextMessages = chronologicalMessages.map((msg, index) => {
                const role = msg.is_from_user ? 'Пользователь' : 'Агент поддержки';
                const time = new Date(msg.created_at).toLocaleString('ru-RU');
                return `${index + 1}. [${time}] ${role}: ${msg.message}`;
            }).join('\n');
            
            return `Последние сообщения из истории поддержки (${messages.length} сообщений):\n\n${contextMessages}\n\nИспользуй этот контекст для понимания предыдущих обращений пользователя и предоставления более точных ответов.`;

        } catch (error) {
            return 'Произошла ошибка при получении истории сообщений.';
        }
    }
} 