import os
import openai

openai.api_key = "your_api_key"

def sentiment_analysis(text):
        sentiment = openai.Completion.create(
            engine="text-davinci-002",
            prompt=f"Indica la emoción predominante en el siguiente texto: '{text}'\nEmoción:",
            max_tokens=10,
            n=1,
            stop=None,
            temperature=0.5,
        )
        return sentiment.choices[0].text.strip()

import difflib

def is_response_similar(response, conversation_history):
    for message in conversation_history:
        if difflib.SequenceMatcher(None, response, message).ratio() > 0.8:
            return True
    return False

def chatbot_response(prompt):
    completions = openai.Completion.create(
        engine="text-davinci-002",
        prompt=prompt,
        max_tokens=150,
        n=3,
        stop=None,
        temperature=0.5,
        presence_penalty=0.2,  # Añade este parámetro para mejorar la empatía y sensibilidad emocional
    )

    best_response = completions.choices[0].text.strip()
    for choice in completions.choices[1:]:
        response = choice.text.strip()
        if sentiment_analysis(response) == "positiva" or sentiment_analysis(response) == "neutral":
            if choice.finish_reason == "stop" and len(response) > len(best_response):
                best_response = response

    return best_response.replace('\n', ' ').replace('  ', ' ')

context = (
    "El siguiente chatbot es Marcos, un fisioterapeuta especializado en fisioterapia deportiva y ciencias de la actividad física y del deporte. Está diseñado para responder preguntas relacionadas con la fisioterapia, dar consejos específicos sobre ejercicios, estiramientos y entrenamientos, y ayudar en la recuperación y prevención de lesiones deportivas. Marcos también puede realizar entrevistas de historial de fisioterapia con el objetivo de recopilar información importante."
)

print("Chatbot GPT-4 fisioterápico. Marcos Valera")
print("Escribe 'salir' para finalizar la conversación.")

conversation_history = []
interview_done = False
pain_information = {}

def validate_pain_intensity_input(input_str):
    try:
        value = int(input_str)
        if 1 <= value <= 10:
            return True
    except ValueError:
        pass
    return False

def interview_process():
    global interview_done
    if not interview_done:
        print("Chatbot: Voy a hacer algunas preguntas para recopilar más información sobre tus síntomas.")
        pain_information['pain_location'] = input("Chatbot: ¿Dónde sientes el dolor? ")
        pain_information['pain_intensity'] = input("Chatbot: ¿Qué tan intenso es el dolor del 1 al 10? ")
        while not validate_pain_intensity_input(pain_information['pain_intensity']):
            pain_information['pain_intensity'] = input("Chatbot: Por favor, ingresa un número del 1 al 10 para indicar la intensidad del dolor: ")
        pain_information['pain_duration'] = input("Chatbot: ¿Cuánto tiempo llevas sintiendo este dolor? ")
        pain_information['pain_description'] = input("Chatbot: ¿Podrías describir el dolor? (por ejemplo, agudo, constante, punzante, etc.) ")
        pain_information['pain_trigger'] = input("Chatbot: ¿Hay movimientos específicos que desencadenen el dolor? ")
        interview_done = True

while True:
    user_input = input("Tú: ")
    if user_input.lower() == "salir":
        break

    if "me duele" in user_input.lower():
        interview_process()

    if "puedo hacer algo que me alivie el dolor" in user_input.lower():
        response = "Basándose en la información que me proporcionaste, te sugiero que pruebes los siguientes ejercicios para aliviar el dolor:"
        conversation_history.append(f"Usuario: {response}")
    else:
        conversation_history.append(f"Usuario: {user_input}")

        prompt = f"{context}\n\n{' '.join(conversation_history)}\nChatbot:"
        response = chatbot_response(prompt)
        while is_response_similar(response, conversation_history):  # Use the new function to check for similar answers
            response = chatbot_response(prompt)
        conversation_history.append(f"Chatbot: {response}")
        print(f"Chatbot: {response}")