import sqlite3
import requests
import nltk
from nltk.tokenize import word_tokenize

# Descargar recursos de NLTK
nltk.download('punkt', quiet=True)

# 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 API (ejemplo genérico)
def llamar_api(mensaje):
    url = "https://api.ejemplo.com/chat"
    headers = {"Authorization": "Bearer TU_TOKEN"}
    payload = {"input": mensaje}
    try:
        respuesta = requests.post(url, json=payload, headers=headers)
        return respuesta.json().get("output", "No tengo respuesta.")
    except Exception as e:
        return f"Error al conectar con la API: {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(mensaje)
        if respuesta_api:
            agregar_respuesta(categoria, respuesta_api)
        return respuesta_api

# Ejecutar el chatbot
if __name__ == "__main__":
    inicializar_db()
    print("Escribe tu mensaje (o 'salir' para terminar):")
    while True:
        mensaje = input("Tú: ")
        if mensaje.lower() in ["salir", "exit"]:
            print("¡Hasta luego!")
            break
        print("Damemo:", generar_respuesta(mensaje))
