const router = require('express').Router();
const { getSupabaseClient } = require('./supabaseClient');

// Получить все чаты по дому
router.get('/chats', async (req, res) => {
  console.log('🏠 [Server] GET /chats запрос получен');
  console.log('🏠 [Server] Query параметры:', req.query);
  
  const supabase = getSupabaseClient();
  const { building_id } = req.query;
  
  if (!building_id) {
    console.log('❌ [Server] Ошибка: building_id обязателен');
    return res.status(400).json({ error: 'building_id required' });
  }
  
  try {
    console.log('🔍 [Server] Выполняем запрос к Supabase для здания:', building_id);
    
    const { data, error } = await supabase.from('chats').select('*').eq('building_id', building_id);
    
    if (error) {
      console.log('❌ [Server] Ошибка Supabase:', error);
      return res.status(400).json({ error: error.message });
    }
    
    console.log('✅ [Server] Чаты получены:', data?.length || 0, 'шт.');
    res.json(data || []);
  } catch (err) {
    console.log('❌ [Server] Неожиданная ошибка:', err);
    res.status(500).json({ error: 'Internal server error' });
  }
});

// Получить все чаты по квартире (через building_id)
router.get('/chats/by-apartment', async (req, res) => {
  const supabase = getSupabaseClient();
  const { apartment_id } = req.query;
  if (!apartment_id) return res.status(400).json({ error: 'apartment_id required' });
  // Получаем building_id квартиры и сразу чаты этого дома
  const { data, error } = await supabase
    .from('chats')
    .select('*, apartments!inner(id, building_id)')
    .eq('apartments.id', apartment_id);
  if (error) return res.status(400).json({ error: error.message });
  res.json(data);
});

// Создать новый чат
router.post('/chats', async (req, res) => {
  const supabase = getSupabaseClient();
  const { building_id, name } = req.body;
  
  if (!building_id) {
    return res.status(400).json({ error: 'building_id is required' });
  }
  
  const { data, error } = await supabase
    .from('chats')
    .insert({ building_id, name })
    .select()
    .single();
    
  if (error) return res.status(400).json({ error: error.message });
  res.json(data);
});

// Получить конкретный чат по ID
router.get('/chats/:chat_id', async (req, res) => {
  const supabase = getSupabaseClient();
  const { chat_id } = req.params;
  
  const { data, error } = await supabase
    .from('chats')
    .select('*')
    .eq('id', chat_id)
    .single();
    
  if (error) return res.status(400).json({ error: error.message });
  res.json(data);
});

// Обновить чат
router.put('/chats/:chat_id', async (req, res) => {
  const supabase = getSupabaseClient();
  const { chat_id } = req.params;
  const { name } = req.body;
  
  const { data, error } = await supabase
    .from('chats')
    .update({ name })
    .eq('id', chat_id)
    .select()
    .single();
    
  if (error) return res.status(400).json({ error: error.message });
  res.json(data);
});

// Удалить чат
router.delete('/chats/:chat_id', async (req, res) => {
  const supabase = getSupabaseClient();
  const { chat_id } = req.params;
  
  const { error } = await supabase
    .from('chats')
    .delete()
    .eq('id', chat_id);
    
  if (error) return res.status(400).json({ error: error.message });
  res.json({ success: true, message: 'Chat deleted successfully' });
});

// Получить статистику чата (количество сообщений, участников и т.д.)
router.get('/chats/:chat_id/stats', async (req, res) => {
  const supabase = getSupabaseClient();
  const { chat_id } = req.params;
  
  try {
    // Получаем количество сообщений
    const { count: messageCount, error: messageError } = await supabase
      .from('messages')
      .select('*', { count: 'exact', head: true })
      .eq('chat_id', chat_id);
      
    if (messageError) throw messageError;

    // Получаем информацию о чате с домом
    const { data: chatInfo, error: chatError } = await supabase
      .from('chats')
      .select(`
        *,
        buildings (
          id,
          name,
          address,
          apartments (
            apartment_residents (
              user_id
            )
          )
        )
      `)
      .eq('id', chat_id)
      .single();
      
    if (chatError) throw chatError;

    // Собираем уникальные user_id жителей дома
    const userIds = new Set();
    chatInfo.buildings.apartments.forEach(apartment => {
      apartment.apartment_residents.forEach(resident => {
        userIds.add(resident.user_id);
      });
    });

    // Получаем профили всех жителей
    let uniqueResidents = [];
    if (userIds.size > 0) {
      const { data: profiles } = await supabase
        .from('user_profiles')
        .select('id, full_name, avatar_url')
        .in('id', Array.from(userIds));
      
      uniqueResidents = profiles || [];
    }

    res.json({
      chat_id,
      chat_name: chatInfo.name,
      building: {
        id: chatInfo.buildings.id,
        name: chatInfo.buildings.name,
        address: chatInfo.buildings.address
      },
      message_count: messageCount || 0,
      total_residents: uniqueResidents.length,
      residents: uniqueResidents
    });
  } catch (error) {
    res.status(400).json({ error: error.message });
  }
});

// Получить последнее сообщение в чате
router.get('/chats/:chat_id/last-message', async (req, res) => {
  console.log('💬 [Server] GET /chats/:chat_id/last-message запрос получен');
  console.log('💬 [Server] Chat ID:', req.params.chat_id);
  
  const supabase = getSupabaseClient();
  const { chat_id } = req.params;
  
  try {
    console.log('🔍 [Server] Выполняем запрос последнего сообщения для чата:', chat_id);
    
    // Получаем последнее сообщение
    const { data: lastMessage, error } = await supabase
      .from('messages')
      .select('*')
      .eq('chat_id', chat_id)
      .order('created_at', { ascending: false })
      .limit(1)
      .single();
      
    let data = null;
    
    if (error && error.code === 'PGRST116') {
      console.log('ℹ️ [Server] Сообщений в чате нет (PGRST116)');
      data = null;
    } else if (error) {
      console.log('❌ [Server] Ошибка Supabase при получении последнего сообщения:', error);
      return res.status(400).json({ error: error.message });
    } else if (lastMessage) {
      // Получаем профиль пользователя для сообщения
      const { data: userProfile } = await supabase
        .from('user_profiles')
        .select('id, full_name, avatar_url')
        .eq('id', lastMessage.user_id)
        .single();
      
      // Объединяем сообщение с профилем
      data = {
        ...lastMessage,
        user_profiles: userProfile || null
      };
      console.log('✅ [Server] Последнее сообщение получено для чата:', chat_id);
         }
     
     res.json(data);
  } catch (err) {
    console.log('❌ [Server] Неожиданная ошибка при получении последнего сообщения:', err);
    res.status(500).json({ error: 'Internal server error' });
  }
});

module.exports = router; 