import os
import requests
import json
import sys
import platform

# API ключ для CoreGPT
API_KEY = os.getenv("COREGPT_API_KEY", "96CC4-2B9A7-3959B-D8EB7")
API_URL = "https://core-gpt.com/v1/chat/completions"

# Шаблоны для запросов
COMMAND_PROMPT_TEMPLATE = (
    "Сгенерируй команду для следующего запроса: \n\n"
    "\"{user_query}\"\n\n"
    "Правила:\n"
    "- Сгенерируй команды одной строкой, только команды, без объяснений, без markdown, эта команда будет выполнена автоматически.\n"
    "Информация о системе: ОС - {os}, версия Python - {python_version}, имя хоста - {hostname}, пользователь - {username}."
)


def get_system_info():
    """Собирает информацию о системе."""
    return {
        "os": platform.system(),
        "python_version": platform.python_version(),
        "hostname": platform.node(),
        "username": os.getenv("USER") or os.getenv("USERNAME") or "unknown",
    }

def get_ai_response(user_query):
    """Отправляет запрос в CoreGPT и возвращает ответ модели."""
    system_info = get_system_info()
    
    prompt = COMMAND_PROMPT_TEMPLATE.format(user_query=user_query, **system_info)

    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    }

    payload = {
        "model": "CoreGPT",
        "messages": [{"role": "user", "content": prompt}],
        "stream": True,
    }

    try:
        response = requests.post(API_URL, headers=headers, data=json.dumps(payload), stream=True)
        response.raise_for_status()

        # Считываем потоковый ответ
        result = ""
        for line in response.iter_lines():
            if line:  # Пропускаем пустые строки
                decoded_line = line.decode("utf-8").strip()
                if decoded_line.startswith("data: "):
                    try:
                        chunk = json.loads(decoded_line[6:])
                        delta = chunk.get("choices", [{}])[0].get("delta", {}).get("content", "")
                        result += delta
                    except json.JSONDecodeError:
                        continue
        return result.strip()

    except Exception as e:
        print(f"Ошибка при запросе к API: {e}")
        return None

def execute_command(command):
    """Выполняет команду в терминале."""
    os.system(command)

def main():
    """Главная функция."""
    # Получаем запрос из аргументов командной строки или запрашиваем у пользователя
    user_query = " ".join(sys.argv[1:]).strip() or input("Введите ваш запрос: ").strip()

    if not user_query:
        print("Запрос не может быть пустым.")
        return

    print("Обращение к CoreGPT...")
    command = get_ai_response(user_query)

    if not command:
        print("Не удалось получить ответ от модели.")
        return

    print(f"Сгенерированная команда: \n\n{command}\n")
    choice = input("Выполнить команду?").strip().lower()

    if choice in ("n", "no"):
        print("Команда отменена.")
    else:
        print("Выполняю команду...\n")
        execute_command(command)

if __name__ == "__main__":
    main()
