import requests
import openai
import random
import re
from googlesearch import search
from newspaper import Article, Config
import mimetypes
import time
import os
import PyPDF2
import docx
import pandas as pd
from youtube_transcript_api import YouTubeTranscriptApi

# Configurația pentru API-ul local GPT4All
api_url = "http://localhost:4891/v1/chat/completions"

# Deschide un fișier jurnal cu codificare UTF-8
log_file = open("jurnal.txt", "a", encoding="utf-8")

def log_message(message):
    """Funcție pentru a scrie un mesaj în jurnal și a-l afișa pe ecran."""
    print(message)
    log_file.write(message + "\n")

def gpt4all_conversation(prompt):
    """Funcție pentru a trimite un prompt către GPT4All și a primi un răspuns."""
    payload = {
        "model": "Hermes",  # Specifică modelul Hermes
        "messages": [{"role": "user", "content": prompt}],
        "max_tokens": 150,
        "temperature": 0.7
    }

    log_message(f"Trimitere prompt: {prompt}")
    response = requests.post(api_url, json=payload)

    if response.status_code == 200:
        response_json = response.json()
        response_text = response_json['choices'][0]['message']['content']
        log_message(f"Răspuns AI: {response_text}")
        return response_text
    else:
        error_message = f"Eroare la API: {response.status_code} - {response.text}"
        log_message(error_message)
        return None

def google_search(query):
    """Funcție pentru căutare pe Google și preluare articole."""
    log_message(f"Căutare pe Google: {query}")
    results = []
    for j in search(query, num=1, stop=1, pause=2):
        results.append(j)
    return results[0] if results else None

def generate_theme():
    """Funcție pentru a genera o temă de discuție folosind AI-ul."""
    prompt = "Please generate a discussion topic from any field."
    return gpt4all_conversation(prompt)

def ai_conversation():
    """Funcție pentru a iniția o conversație între două AI-uri."""
    while True:
        # Generează o temă nouă folosind AI-ul
        theme = generate_theme()
        log_message(f"Noua temă de discuție generată de AI: {theme}")

        if theme:
            # AI 1 începe discuția pe tema generată
            prompt1 = f"What do you think about {theme}?"
            response1 = gpt4all_conversation(prompt1)
            log_message("AI 1 a răspuns.")

            if response1:
                # Caută pe internet informații legate de răspunsul AI 1
                search_query = f"{theme} {response1}"
                search_result = google_search(search_query)
                log_message(f"Rezultat căutare Google: {search_result}")

                # AI 2 răspunde la AI 1 folosind informațiile căutate
                prompt2 = f"AI 1 a spus: '{response1}'. I found this information online: {search_result}. What do you think about this?"
                response2 = gpt4all_conversation(prompt2)
                log_message("AI 2 a răspuns.")

                if response2:
                    # AI 1 răspunde din nou și ciclul continuă
                    prompt3 = f"AI 2 a răspuns: '{response2}'. How should we continue the discussion about {theme}?"
                    response3 = gpt4all_conversation(prompt3)
                    log_message("AI 1 a răspuns din nou.")

        # Așteaptă câteva secunde înainte de următorul ciclu
        time.sleep(5)

# Apelarea funcțiilor și logica principală a programului
if __name__ == "__main__":
    try:
        # Începe o conversație AI continuă pe teme diferite
        ai_conversation()
    except KeyboardInterrupt:
        log_message("Programul a fost întrerupt de utilizator.")
    finally:
        # Închide fișierul jurnal la final
        log_file.close()
