import { Router } from 'express';

const router = Router();

// Функция для задержки
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));

router.post('/generate-review', async (req, res) => {
  try {
    const { prompt, model, temperature, max_tokens } = req.body;

    const headers = {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer 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',
      'HTTP-Referer': 'http://localhost:5173',
      'X-Title': 'Campfire Critics'
    };

    console.log('Request headers:', headers);

    // Максимальное количество попыток
    const maxRetries = 3;
    let retryCount = 0;
    let lastError = null;

    while (retryCount < maxRetries) {
      try {
        const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
          method: 'POST',
          headers,
          body: JSON.stringify({
            model,
            messages: [
              {
                role: 'user',
                content: [
                  {
                    type: 'text',
                    text: prompt
                  }
                ]
              }
            ],
            temperature,
            max_tokens
          })
        });

        if (response.status === 429) {
          console.log(`Rate limit hit, attempt ${retryCount + 1} of ${maxRetries}`);
          // Увеличиваем время ожидания с каждой попыткой
          await delay(Math.pow(2, retryCount) * 1000);
          retryCount++;
          continue;
        }

        if (!response.ok) {
          const errorData = await response.json().catch(() => null);
          console.error('OpenRouter API Error:', errorData);
          console.error('Response status:', response.status);
          console.error('Response headers:', response.headers);
          return res.status(response.status).json({
            error: {
              message: errorData?.error?.message || 'Ошибка при генерации рецензии',
              code: response.status
            }
          });
        }

        const data = await response.json();
        return res.json(data);
      } catch (error) {
        lastError = error;
        console.error(`Attempt ${retryCount + 1} failed:`, error);
        retryCount++;
        if (retryCount < maxRetries) {
          await delay(Math.pow(2, retryCount) * 1000);
        }
      }
    }

    // Если все попытки исчерпаны
    throw lastError || new Error('Превышен лимит запросов к API');
  } catch (error) {
    console.error('Error in generate-review endpoint:', error);
    res.status(500).json({
      error: {
        message: error.message || 'Внутренняя ошибка сервера',
        code: 500
      }
    });
  }
});

export default router; 