import sqlite3
import requests
import nltk
from nltk.tokenize import word_tokenize

# Inicializar base de datos SQLite
def inicializar_db():
    conn = sqlite3.connect("respuestas.db")
    cursor = conn.cursor()
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS respuestas (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            categoria TEXT,
            respuesta TEXT
        )
    ''')
    conn.commit()
    conn.close()

# Agregar nueva respuesta a la BD
def agregar_respuesta(categoria, respuesta):
    conn = sqlite3.connect("respuestas.db")
    cursor = conn.cursor()
    cursor.execute("INSERT INTO respuestas (categoria, respuesta) VALUES (?, ?)", (categoria, respuesta))
    conn.commit()
    conn.close()

# Buscar respuesta en la BD
def buscar_db(categoria):
    conn = sqlite3.connect("respuestas.db")
    cursor = conn.cursor()
    cursor.execute("SELECT respuesta FROM respuestas WHERE categoria = ?", (categoria,))
    fila = cursor.fetchone()
    conn.close()
    return fila[0] if fila else None

# Conectar con Dialogflow API
def llamar_api_dialogflow(mensaje):
    url = "https://dialogflow.googleapis.com/v2/projects/TU_PROYECTO_ID/agent/sessions/TU_SESION_ID:detectIntent"
    headers = {
        "Authorization": "Bearer TU_TOKEN_OAUTH",
        "Content-Type": "application/json"
    }
    payload = {
        "queryInput": {
            "text": {
                "text": mensaje,
                "languageCode": "es"
            }
        }
    }
    try:
        response = requests.post(url, json=payload, headers=headers)
        data = response.json()
        return data["queryResult"]["fulfillmentText"]
    except Exception as e:
        return f"Error al conectar con Dialogflow: {e}"

# Identificar categoría de mensaje
def identificar_categoria(mensaje):
    tokens = word_tokenize(mensaje.lower())
    if "clima" in tokens:
        return "clima"
    elif "hora" in tokens:
        return "hora"
    elif "hola" in tokens or "buenas" in tokens:
        return "saludo"
    else:
        return "desconocida"

# Generador de respuesta principal
def generar_respuesta(mensaje):
    categoria = identificar_categoria(mensaje)
    respuesta = buscar_db(categoria)
    if respuesta:
        return respuesta
    else:
        respuesta_api = llamar_api_dialogflow(mensaje)
        if respuesta_api:
            agregar_respuesta(categoria, respuesta_api)
        return respuesta_api

# 🧪 Para probarlo
if __name__ == "__main__":
    nltk.download('punkt')
    inicializar_db()
    print("Bot: ¡Hola! Soy tu asistente. Escribe 'salir' para terminar.\n")
    while True:
        mensaje = input("Tú: ")
        if mensaje.lower() in ["salir", "exit"]:
            break
        print("Bot:", generar_respuesta(mensaje))
