from flask import Flask, request, Response
from twilio.twiml.voice_response import VoiceResponse
import openai
import requests
import os

app = Flask(__name__)

# Configura tu API Key de OpenAI
OPENAI_API_KEY = "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"
openai.api_key = OPENAI_API_KEY

# Ruta para manejar la llamada
@app.route("/voice", methods=["POST"])
def voice():
    """ Recibe la llamada y graba la voz del usuario """
    response = VoiceResponse()
    response.say("Hola, dime en qué puedo ayudarte.", voice="alice", language="es-ES")
    response.record(timeout=5, transcribe=False, play_beep=True, action="/process_audio")
    return Response(str(response), mimetype="text/xml")

# Ruta para procesar el audio grabado
@app.route("/process_audio", methods=["POST"])
def process_audio():
    """ Transcribe el audio, usa GPT-4 y responde con voz """
    recording_url = request.form["RecordingUrl"]  # URL del audio grabado por Twilio
    print(f"Audio grabado: {recording_url}")

    # 1. Descarga el audio
    audio_response = requests.get(recording_url)
    with open("audio.wav", "wb") as f:
        f.write(audio_response.content)

    # 2. Transcribe el audio con Whisper
    with open("audio.wav", "rb") as audio_file:
        transcription = openai.Audio.transcribe("whisper-1", audio_file)
    
    user_text = transcription["text"]
    print(f"Usuario dijo: {user_text}")

    # 3. Genera respuesta con GPT-4
    chat_response = openai.ChatCompletion.create(
        model="gpt-4-turbo",
        messages=[{"role": "system", "content": "Eres un asistente telefónico útil."},
                  {"role": "user", "content": user_text}]
    )
    
    assistant_reply = chat_response["choices"][0]["message"]["content"]
    print(f"IA responde: {assistant_reply}")

    # 4. Convierte la respuesta en voz con OpenAI TTS
    tts_response = openai.Audio.create(
        model="tts-1",
        voice="alloy",
        input=assistant_reply
    )

    with open("response.mp3", "wb") as f:
        f.write(tts_response["audio"])

    # 5. Usa Twilio para reproducir la respuesta
    response = VoiceResponse()
    response.play("response.mp3")  # Reproduce el archivo generado

    return Response(str(response), mimetype="text/xml")

if __name__ == "__main__":
    app.run(port=5000, debug=True)
