# ruff: noqa: E501, W291
import logging

from django.conf import settings
from yandex_cloud_ml_sdk import YCloudML
from yandex_cloud_ml_sdk.exceptions import YCloudMLError

logger = logging.getLogger(__name__)

DEFAULT_INVALID_SIGNAL = (
    "В интернете есть много сайтов с информацией на эту тему. "
    "[Посмотрите, что нашлось в поиске](https://ya.ru)"
).lower()

MODERATION_PROMPT = """
Ты — строгий AI-модератор контента. Анализируй текст ПО ВСЕМ указанным критериям.
Если ЛЮБОЙ из критериев нарушен — верни true. Только если ВСЕ критерии соблюдены — верни false.

Критерии нарушений (true):
1. Нецензурная лексика: мат, эвфемизмы, оскорбительные выражения
2. Угрозы: прямые/косвенные угрозы жизни, шантаж, буллинг
3. Дискриминация: расизм, сексизм, ксенофобия, гомофобия
""".strip()


class YandexAIModerator:
    def __init__(self) -> None:
        self.sdk = YCloudML(
            folder_id=settings.YANDEX_CLOUD_FOLDER_ID,
            auth=settings.YANDEX_CLOUD_API_KEY,
        )

    def get_moderation_verdict(self, text: str) -> bool:
        try:
            promise = (
                self.sdk.models.completions(
                    "yandexgpt-lite", model_version="latest"
                )
                .configure(max_tokens=500, temperature=0.1)
                .run_deferred(
                    [
                        {"role": "system", "text": MODERATION_PROMPT},
                        {"role": "user", "text": text},
                    ]
                )
            )
            result = promise.wait()
            logger.debug("Moderation API response: %s", result)

            return self._normalize_response(result.alternatives[0].text)

        except YCloudMLError:
            return False

    def _normalize_response(self, text: str) -> bool:
        clean_verdict = text.strip().lower().split("\n")[0]
        return clean_verdict in ("true", DEFAULT_INVALID_SIGNAL)
