import time

import requests
import torch
from deep_translator import GoogleTranslator
from transformers import pipeline


# Replace the sentiment analysis model
sentiment_model = pipeline(
    'sentiment-analysis',
    model='distilbert-base-uncased-finetuned-sst-2-english',
    tokenizer='distilbert-base-uncased-finetuned-sst-2-english',
    device=0 if torch.cuda.is_available() else -1
)


def retrieve_from_vdb(query):
    print(f"Отправка запроса к FastAPI сервису: {query}")
    response = requests.post(f"{VECTOR_API_URL}/search/", json={"query": query})
    if response.status_code == 200:
        results = response.json().get("results", [])
        print(f"Получено {len(results)} результатов: {results}")
        return results
    else:
        print(f"Ошибка при поиске: {response.text}")
        return []


def analyze_sentiment(comments):
    print("Начинаем анализ настроений.")
    results = []

    for i in range(0, len(comments), 50):
        batch = comments[i:i + 50]
        print(f"Анализируем батч с {i} по {i + len(batch)} комментарий: {batch}")

        translated_batch = []
        valid_comments = []  # Список комментариев с успешным переводом

        for comment in batch:
            try:
                translated = GoogleTranslator(source='auto', target="en").translate(comment)
                if translated:
                    translated_batch.append(translated)
                    valid_comments.append(comment)
                else:
                    print(f"Перевод комментария не удался или вернул пустую строку: {comment}")
            except Exception as e:
                print(f"Ошибка при переводе комментария '{comment}': {e}")

        if not translated_batch:
            print("Все переводы в этом батче не удались. Пропускаем этот батч.")
            continue  # Переходим к следующему батчу, если перевод не удался

        print(f"Переведённый батч: {translated_batch}")

        try:
            batch_results = sentiment_model(translated_batch)
            print(f"Результаты батча: {batch_results}")
            results.extend(batch_results)
        except Exception as e:
            print(f"Ошибка при анализе настроений: {e}")
            # Добавляем результат с неопределенным настроением для каждого переведенного комментария
            for _ in translated_batch:
                results.append({'label': 'UNKNOWN', 'score': 0.0})

        time.sleep(1)  # Задержка для предотвращения перегрузки API

    print(f"Анализ настроений завершен. Общие результаты: {results}")
    return results