import subprocess
import sys
import re
import time
import ollama

# Funcție pentru instalarea pachetelor lipsă
def install_package(package_name):
    subprocess.check_call([sys.executable, "-m", "pip", "install", package_name])

# Funcție pentru generarea codului folosind Qwen2.5-Coder prin Ollama
def generate_code_from_idea(idea):
    prompt = f"Generează un program Python care să îndeplinească următoarea cerință: {idea}"
    response = ollama.chat(model='qwen2.5-coder', messages=[{'role': 'user', 'content': prompt}])
    # Extrage codul Python dintre delimitatori
    match = re.search(r"```python(.*?)```", response['message']['content'], re.DOTALL)
    return match.group(1).strip() if match else None

# Funcție pentru rularea codului și prinderea eventualelor erori
def run_code(code):
    try:
        exec(code, {})
        return None
    except Exception as e:
        return str(e)

# Funcție principală care implementează ciclul de auto-corecție
def main():
    idea = input("Introdu ideea ta de program în Python: ")

    while True:
        code = generate_code_from_idea(idea)
        if not code:
            print("Nu am putut genera cod valid. Încerc din nou...")
            continue
        
        print(f"Cod generat:\n{code}\nÎncerc să rulez codul...")
        error_message = run_code(code)

        if error_message:
            print(f"Eroare detectată: {error_message}")
            missing_modules = re.findall(r"No module named '(\w+)'", error_message)
            for module in missing_modules:
                print(f"Instalez modulul: {module}...")
                try:
                    install_package(module)
                except Exception as e:
                    print(f"Eroare la instalarea modulului {module}: {e}")
                    break
        else:
            print("Codul a rulat cu succes și îndeplinește cerința.")
            break

if __name__ == "__main__":
    main()
