const router = require('express').Router();
const { createClient } = require('@supabase/supabase-js');
const { getSupabaseUrl, getSupabaseKey, getSupabaseServiceKey } = require('./get-constants');

let supabase = null;
let initializationPromise = null;

async function initSupabaseClient() {
  console.log('🔄 [Supabase Client] Начинаем инициализацию...');
  
  try {
    console.log('🔄 [Supabase Client] Получаем конфигурацию...');
    const supabaseUrl = await getSupabaseUrl();
    const supabaseAnonKey = await getSupabaseKey();
    const supabaseServiceRoleKey = await getSupabaseServiceKey();
    
    
    if (!supabaseUrl || !supabaseServiceRoleKey) {
      throw new Error('Missing required Supabase configuration');
    }
    
    supabase = createClient(supabaseUrl, supabaseServiceRoleKey);
    
    return supabase;
    
  } catch (error) {
    console.error('❌ [Supabase Client] Ошибка инициализации:', error);
    throw error;
  }
}

function getSupabaseClient() {
  if (!supabase) {
    throw new Error('Supabase client is not initialized. Call initSupabaseClient first.');
  }
  return supabase;
}

// POST /refresh-supabase-client
router.post('/refresh-supabase-client', async (req, res) => {
  try {
    await initSupabaseClient();
    res.json({ success: true, message: 'Supabase client refreshed' });
  } catch (error) {
    console.error('❌ [Supabase Client] Ошибка обновления:', error);
    res.status(500).json({ error: error.message });
  }
});

// GET /supabase-client-status
router.get('/supabase-client-status', (req, res) => {
  console.log('🔍 [Supabase Client] Проверяем статус клиента...');
  
  const isInitialized = !!supabase;
  
  res.json({
    initialized: isInitialized,
    clientExists: !!supabase,
    timestamp: new Date().toISOString()
  });
});

// Инициализация клиента при старте
initializationPromise = (async () => {
  try {
    await initSupabaseClient();
  } catch (error) {
    console.error('❌ [Supabase Client] Ошибка инициализации при старте:', error);
    // Планируем повторную попытку через 5 секунд
    setTimeout(async () => {
      try {
        await initSupabaseClient();
      } catch (retryError) {
        console.error('❌ [Supabase Client] Повторная инициализация неудачна:', retryError);
      }
    }, 5000);
  }
})();

module.exports = {
  getSupabaseClient,
  initSupabaseClient,
  supabaseRouter: router,
  // Экспортируем промис инициализации для возможности ожидания
  initializationPromise
};