const router = require('express').Router();
const { getSupabaseClient } = require('./supabaseClient');
const { SupportAgent } = require('./support-ai-agent/support-agent');

// Хранилище агентов для разных пользователей
const userAgents = new Map();

/**
 * Получить или создать агента для пользователя
 */
function getUserAgent(userId) {
  if (!userAgents.has(userId)) {
    const config = {
      threadId: userId,
      temperature: 0.7
    };
    userAgents.set(userId, new SupportAgent(config));
  }
  return userAgents.get(userId);
}

// GET /api/support - Получить историю сообщений пользователя
router.get('/support', async (req, res) => {
  const supabase = getSupabaseClient();
  const { user_id } = req.query;
  
  if (!user_id) {
    return res.status(400).json({ error: 'user_id обязателен' });
  }

  try {
    // Получаем все сообщения пользователя из базы данных
    const { data: messages, error } = await supabase
      .from('support')
      .select('*')
      .eq('user_id', user_id)
      .order('created_at', { ascending: true });
    
    if (error) {
      return res.status(400).json({ error: error.message });
    }

    res.json({ 
      messages: messages || [],
      success: true
    });

  } catch (error) {
    console.error('Ошибка в GET /support:', error);
    res.status(500).json({ 
      error: 'Внутренняя ошибка сервера',
      success: false
    });
  }
});

// POST /api/support
router.post('/support', async (req, res) => {
  const supabase = getSupabaseClient();
  const { user_id, message, apartment_id } = req.body;
  
  if (!user_id || !message) {
    return res.status(400).json({ error: 'user_id и message обязательны' });
  }

  try {
    // Сохраняем сообщение пользователя в базу данных
    const { error: insertError } = await supabase
      .from('support')
      .insert({ user_id, message, is_from_user: true });
    
    if (insertError) {
      return res.status(400).json({ error: insertError.message });
    }

    // Получаем агента для пользователя
    const agent = getUserAgent(user_id);

    // Получаем ответ от AI-агента, передавая apartment_id
    const aiResponse = await agent.processMessage(message, apartment_id);
    
    if (!aiResponse.success) {
      console.error('Ошибка AI-агента:', aiResponse.error);
      return res.status(500).json({ 
        error: 'Ошибка при генерации ответа',
        reply: 'Извините, произошла ошибка. Попробуйте позже.'
      });
    }

    // Сохраняем ответ агента в базу данных
    const { error: responseError } = await supabase
      .from('support')
      .insert({ 
        user_id, 
        message: aiResponse.content, 
        is_from_user: false 
      });
    
    if (responseError) {
      console.error('Ошибка сохранения ответа:', responseError);
      // Не возвращаем ошибку пользователю, так как ответ уже сгенерирован
    }

    // Возвращаем ответ пользователю
    res.json({ 
      reply: aiResponse.content,
      success: true
    });

  } catch (error) {
    console.error('Ошибка в supportApi:', error);
    res.status(500).json({ 
      error: 'Внутренняя ошибка сервера',
      reply: 'Извините, произошла ошибка. Попробуйте позже.'
    });
  }
});

// DELETE /api/support/history/:userId - Очистка истории диалога
router.delete('/support/history/:userId', async (req, res) => {
  const { userId } = req.params;

  try {
    if (userAgents.has(userId)) {
      const agent = userAgents.get(userId);
      await agent.clearHistory();
      
      res.json({
        message: 'История диалога очищена',
        success: true
      });
    } else {
      res.json({
        message: 'Агент для данного пользователя не найден',
        success: true
      });
    }

  } catch (error) {
    console.error('Ошибка в /support/history:', error);
    res.status(500).json({
      error: 'Внутренняя ошибка сервера',
      success: false
    });
  }
});

module.exports = router;