import os
from dotenv import load_dotenv
from typing import TypedDict, Literal
# CAMBIAMENTO 1: Importiamo la libreria Google
from langchain_google_genai import ChatGoogleGenerativeAI
from pydantic import BaseModel, Field
from langgraph.graph import StateGraph, END

# 1. CARICHIAMO LE CHIAVI
load_dotenv() 

if not os.environ.get("GOOGLE_API_KEY"):
    print("ERRORE: Manca la GOOGLE_API_KEY nel file .env")
    exit()

# 2. DEFINIAMO LA STRUTTURA (Identica a prima)
class RouteDecision(BaseModel):
    step: Literal["agent_saluti", "agent_ricerca", "agent_default"] = Field(
        description="L'agente a cui passare la richiesta dell'utente"
    )
    reasoning: str = Field(description="Perché hai scelto questo agente?")

# 3. LO STATO
class RouterState(TypedDict):
    text: str
    decision: str 

# 4. IL NODO ROUTER CON GEMINI
def nodo_router_ai(state: RouterState):
    print(f"--- [ROUTER GEMINI] Analizzo: '{state['text']}' ---")
    
    # CAMBIAMENTO 2: Usiamo Gemini 1.5 Flash
    llm = ChatGoogleGenerativeAI(
        model="gemini-flash-latest",
        temperature=0
    )
    
    # Gemini supporta nativamente il structured output
    router_llm = llm.with_structured_output(RouteDecision)
    
    try:
        result = router_llm.invoke(
            f"Sei un router per un ecommerce di abbigliamento. Analizza l'intento dell'utente: {state['text']}"
        )
        
        print(f"   Ragionamento AI: {result.reasoning}")
        print(f"   Decisione: {result.step}")
        return {"decision": result.step}
        
    except Exception as e:
        # Fallback di sicurezza se l'API dovesse dare errore
        print(f"   Errore chiamata API: {e}")
        return {"decision": "agent_default"}

# Nodi Dummy
def nodo_saluti(state):
    return {"text": "Ciao! Come posso aiutarti?"}
def nodo_ricerca(state):
    return {"text": "Apro il catalogo prodotti..."}
def nodo_default(state):
    return {"text": "Non ho capito."}

# 5. IL GRAFO (Identico a prima)
workflow = StateGraph(RouterState)

workflow.add_node("router", nodo_router_ai)
workflow.add_node("agent_saluti", nodo_saluti)
workflow.add_node("agent_ricerca", nodo_ricerca)
workflow.add_node("agent_default", nodo_default)

workflow.set_entry_point("router")

workflow.add_conditional_edges(
    "router",
    lambda x: x["decision"]
)

workflow.add_edge("agent_saluti", END)
workflow.add_edge("agent_ricerca", END)
workflow.add_edge("agent_default", END)

app = workflow.compile()

# --- TEST ---
queries = [
    "Ciao, chi sei?",
    "Voglio comprare una giacca di pelle nera",
    "Ho freddo, mi serve qualcosa per l'inverno", # Il test difficile
    "Qual è la capitale della Francia?" 
]

print("\n\nAVVIO TEST CON GEMINI...")
for q in queries:
    print(f"\nUser: {q}")
    app.invoke({"text": q})