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

// Получить все инициативы (по дому)
router.get('/initiatives', async (req, res) => {
  const supabase = getSupabaseClient();
  const { building_id } = req.query;
  let query = supabase.from('initiatives').select('*');
  if (building_id) query = query.eq('building_id', building_id);
  const { data, error } = await query;
  if (error) return res.status(400).json({ error: error.message });
  res.json(data);
});

// Получить инициативу по id (и optionally building_id)
router.get('/initiatives/:id', async (req, res) => {
  const supabase = getSupabaseClient();
  const { id } = req.params;
  const { building_id } = req.query;
  let query = supabase.from('initiatives').select('*').eq('id', id);
  if (building_id) query = query.eq('building_id', building_id);
  const { data, error } = await query.single();
  if (error) return res.status(400).json({ error: error.message });
  res.json(data);
});

// Создать инициативу
router.post('/initiatives', async (req, res) => {
  const supabase = getSupabaseClient();
  const { building_id, creator_id, title, description, status, target_amount, image_url } = req.body;
  const { data, error } = await supabase.from('initiatives').insert([
    { building_id, creator_id, title, description, status, target_amount, image_url }
  ]).select().single();
  if (error) return res.status(400).json({ error: error.message });
  res.json(data);
});

// Обновить инициативу
router.put('/initiatives/:id', async (req, res) => {
  const supabase = getSupabaseClient();
  const { id } = req.params;
  const { title, description, status, target_amount, current_amount, image_url } = req.body;
  const { data, error } = await supabase.from('initiatives').update({
    title, description, status, target_amount, current_amount, image_url
  }).eq('id', id).select().single();
  if (error) return res.status(400).json({ error: error.message });
  res.json(data);
});

// Удалить инициативу
router.delete('/initiatives/:id', async (req, res) => {
  const supabase = getSupabaseClient();
  const { id } = req.params;
  const { error } = await supabase.from('initiatives').delete().eq('id', id);
  if (error) return res.status(400).json({ error: error.message });
  res.json({ success: true });
});

// Получить все инициативы по квартире с голосами пользователя
router.get('/initiatives/by-apartment', async (req, res) => {
  const supabase = getSupabaseClient();
  const { apartment_id, user_id } = req.query;
  if (!apartment_id) return res.status(400).json({ error: 'apartment_id required' });
  // Получаем building_id квартиры
  const { data: apartments, error: err1 } = await supabase
    .from('apartments')
    .select('building_id')
    .eq('id', apartment_id)
    .single();
  if (err1) return res.status(400).json({ error: err1.message });
  const building_id = apartments.building_id;
  // Получаем инициативы этого дома с голосами пользователя (если user_id передан)
  let selectStr = '*, votes:initiatives(id, votes!left(user_id, vote_type))';
  if (!user_id) selectStr = '*';
  const { data, error } = await supabase
    .from('initiatives')
    .select(selectStr)
    .eq('building_id', building_id);
  if (error) return res.status(400).json({ error: error.message });
  // Если user_id передан, фильтруем только голос текущего пользователя
  if (user_id && data) {
    data.forEach(initiative => {
      initiative.user_vote = (initiative.votes || []).find(v => v.user_id === user_id) || null;
      delete initiative.votes;
    });
  }
  res.json(data);
});

module.exports = router; 