import json
import os
import re

import requests

# Основные настройки
OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL_NAME = "qwen3:30b-a3b"  # Имя модели в Ollama
pattern = re.compile(r"<think>.*?<\/think>", flags=re.DOTALL | re.IGNORECASE)


def analyze_dog_breed(file_path):
    with open(file_path, encoding="utf-8") as file:
        text = file.read()
        """Генерирует описание породы с помощью Ollama"""
        prompt = f"""/no_think 
Проанализируй текст ниже и определи ТОЛЬКО указанные ниже признаки породы собаки. Если признак не упомянут в тексте - дополни на основе своих знаний

Признаки для анализа (булевые значения, если не указано иное):
- people_friendly (дружелюбность к взрослым)
- child_friendly (дружелюбность к детям)
- animal_friendly (дружелюбность к другим животным)
- active (уровень активности)
- big (крупный размер)
- small (мелкий размер)
- medium (средний размер)
- smart (высокий интеллект)
- colors (массив возможных окрасов на аглийском строки)
- need_attentions (потребность во внимании)
- need_big_place (необходимость большого пространства)
- good_health (крепкое здоровье)
- tolerates_loneliness (переносимость одиночества)
- hypoallergenic (вызывает аллергию или нет)

Требования:
1. Анализируй ТОЛЬКО явно указанную информацию из текста
2. Если параметр не упомянут - полностью исключи его из JSON
3. Строго соблюдай типы данных: boolean для всех параметров кроме colors (массив строк)
4. Запрещено добавлять любые другие поля, кроме указанных выше
5. Если размер не указан явно - не включай big/small/medium

Верни ответ ТОЛЬКО в виде валидного JSON без комментариев и пояснений.

        Текст для анализа:
        {text}
        """
    response = requests.post(OLLAMA_URL, json={"model": MODEL_NAME, "prompt": prompt, "stream": False})

    if response.status_code == 200:
        return response.json().get("response", "Не удалось получить описание")
    else:
        return f"Ошибка при генерации описания для {file_path}"


def save_description(breed, description):
    """Сохраняет описание в файл"""
    os.makedirs("breed_signs", exist_ok=True)
    filename = f"breed_signs/{breed}.txt"

    with open(filename, "w", encoding="utf-8") as f:
        f.write(pattern.sub("", description))
    print(f"Сохранено: {filename}")


def main():
    with open("../../labels_dogs.json") as f:
        beers = json.load(f)
        for key in beers:
            name = beers[key].replace("_", " ")
            print(f"Генерация признаков для {name}...")
            if os.path.isfile(f"breed_signs/{beers[key]}.txt"):
                print(f"Описание уже существует: {beers[key]}.")
                continue
            description = analyze_dog_breed(f"breed_descriptions/{beers[key]}.txt")
            save_description(beers[key], description)


if __name__ == "__main__":
    main()
