import json
import os
import requests

# Основные настройки
OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL_NAME = "qwen3:30b-a3b"  # Имя модели в Ollama
GIGA_URL = "https://gigachat.devices.sberbank.ru/api/v1/chat/completions"
GIGA_ODEL_NAME = "GigaChat-2-Max"


def generate_cat_breed_description(breed):
    """Генерирует подробное описание породы кошки с помощью Ollama"""
    prompt = f"""Создай подробное и структурированное описание породы кошки {breed}, включая следующие разделы:
1. Происхождение и история породы (откуда появилась, легенды, если есть)
2. Физические характеристики (размер, вес, тип и текстура шерсти, уникальные черты морды или тела)
3. Характер и поведение (темперамент, уровень привязанности к хозяину, активность, игривость, склонность к мяуканью)
4. Совместимость (с детьми, другими кошками и собаками, отношение к незнакомцам)
5. Интеллект и обучаемость (способность к трюкам, приучение к лотку, когтеточке, любопытство)
6. Уход и содержание (особенности груминга, потребность в вертикальном пространстве/игровых комплексах, гигиена ушей и глаз)
7. Здоровье и генетика (характерные для породы заболевания, средняя продолжительность жизни)
8. Питание (склонность к перееданию или аллергиям, рекомендации по рациону)
9. Итог: кому идеально подойдет эта порода (для домоседов, больших семей, аллергиков и т.д.)

Описание должно быть написано живым, но информативным языком, с четкой структурой."""

    # response = requests.post(OLLAMA_URL, 
    #                          json={
    #                              "model": MODEL_NAME, 
    #                              "prompt": prompt, 
    #                              "stream": False, 
    #                              })
    
    response = requests.post(GIGA_URL, 
                             headers={
                                 'Content-Type': 'application/json',
                                 'Accept': 'application/json',
                                 "Authorization": "Bearer "},
                            data=json.dumps({
                                "model": GIGA_ODEL_NAME,
                                "messages":[{
                                    "role": "user",
                                    "content": prompt,
                                    }],
                                "temperature": 0,
                                "top_p": 0,
                                "stream": False,
                                "max_tokens": 3000,
                                "repetition_penalty": 1,
                                "update_interval": 0
                            }), verify=False
                            )

    if response.status_code == 200:
        print(response.json())
        return response.json().get("choices")[0].get("message").get("content")
        #return response.json().get("response", "Не удалось получить описание")
    else:
        return f"Ошибка при генерации описания для {breed}, {response.status_code}, {response.text}"


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

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


def main():
    # Путь к JSON файлу с метками кошек
    labels_path = "../../labels_cats.json"
    
    if not os.path.exists(labels_path):
        print(f"Файл {labels_path} не найден!")
        return

    with open(labels_path, encoding="utf-8") as f:
        cats = json.load(f)
        for key in cats:
            # Превращаем "british_shorthair" в "British Shorthair" для промпта
            name = cats[key].replace("_", " ")
            file_key = cats[key]
            
            print(f"Генерация статьи для кошки: {name}...")
            
            # Проверка, существует ли файл, чтобы не тратить токены/время
            if os.path.isfile(f"cat_descriptions/{file_key}.txt"):
                print(f"Описание уже существует: {file_key}.")
                continue
                
            description = generate_cat_breed_description(name)
            save_description(file_key, description)


if __name__ == "__main__":
    main()