import os
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
import openai
import eventlet

# Defina sua chave de API da OpenAI
openai.api_key = "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"

# Inicializando o Flask e o SocketIO com CORS permitido
app = Flask(__name__)
socketio = SocketIO(app, async_mode='eventlet', cors_allowed_origins=["https://chatbot.ed-consulting.ao"])

# Histórico de mensagens para cada sessão de usuário
conversation_history = []

# Página inicial do chat
@app.route("/")
def index():
    return render_template("index.html")

# Função para gerar respostas do GPT-3.5 ou GPT-4 com base no histórico da conversa
def get_gpt_response(user_input):
    global conversation_history

    # Adicionar a entrada do usuário ao histórico
    conversation_history.append({"role": "user", "content": user_input})

    try:
        # Fazer a chamada para a API da OpenAI com o histórico da conversa
        response = openai.ChatCompletion.create(
            model="gpt-4",  # ou "gpt-4", se tiver acesso
            messages=conversation_history
        )
        
        # Obter a resposta do assistente e adicionar ao histórico
        assistant_response = response.choices[0].message['content']
        conversation_history.append({"role": "assistant", "content": assistant_response})

        return assistant_response

    except Exception as e:
        return "Desculpe, houve um erro ao tentar obter a resposta."

# Evento de mensagem recebida do cliente
@socketio.on("message")
def handle_message(data):
    print(f"Mensagem recebida do cliente: {data}")
    user_input = data["message"]

    # Obter resposta da API da OpenAI
    gpt_response = get_gpt_response(user_input)
    print(f"Resposta do GPT: {gpt_response}")

    # Enviar a resposta de volta ao cliente
    emit("response", {"message": gpt_response}, broadcast=True)

# Iniciar o servidor
if __name__ == "__main__":
    # O servidor rodará na porta 5000
    socketio.run(app, host="0.0.0.0", port=5000, debug=True)
