from app.database.fetch_data import get_mongo_client
from app.core import metadata  # Ensure this is a dictionary like: metadata = defaultdict(dict)
from Ai_Agents.services.process_requests.process_request_knowledge_bank import process_request
from flask_socketio import SocketIO, emit
from flask import Flask, request

# Sample test SID (session ID) to simulate socket session
test_sid = "test_user_001"

# Prepare test metadata structure if not done already
if test_sid not in metadata:
    metadata[test_sid] = {"rag_chain": None, "memory": None}

# Prepare test input data
test_data = {
    "character_id": "d45ca3c0a127273f",  # Replace with valid character ID in DB
    "section_id": "$",  # Dummy/initial section ID
    "message": "Can you tell me about your favorite places in the metaverse?"  # Sample user query
}

# Initialize MongoDB client
client = get_mongo_client()

# Call the process_request function

result = process_request(client, test_data, test_sid)
print("=== RAG Response ===")
print("Response:", result["response"])
print("Section ID:", result["section_id"])
print("Token Usage:", result["token_usage"])

app = Flask(__name__)
socketio = SocketIO(app, cors_allowed_origins="*")

@socketio.on('connect')
def handle_connect():
    print('Client connected:', request.sid)
    emit('connected', {'message': 'Connected to server'})

@socketio.on('disconnect')
def handle_disconnect():
    print('Client disconnected:', request.sid)

@socketio.on('user_message')
def handle_user_message(data):
    # data: { "message": "...", "character_id": "...", ... }
    # Call your AI response logic here
    response = process_request(client, data, request.sid)  # Use your existing function
    emit('ai_response', {'response': response, 'sid': request.sid})
