import os
from fastapi import FastAPI, Request
import anthropic

# Inicializa o app e o cliente do Claude
app = FastAPI()
client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))

@app.post("/alexa")
async def alexa_webhook(request: Request):
    """Endpoint que recebe todas as requisições da Amazon Alexa"""
    payload = await request.json()
    
    # Identifica o tipo de requisição da Alexa
    req_type = payload.get("request", {}).get("type")
    
    # 1. Quando você diz apenas "Alexa, abrir meu assistente"
    if req_type == "LaunchRequest":
        return build_alexa_response("Estou ouvindo. O que você quer tocar ou perguntar?", end_session=False)
        
    # 2. Quando você faz uma pergunta ou dá um comando
    if req_type == "IntentRequest":
        try:
            # Captura o texto do slot (assumindo que o nome do slot na skill é "CatchAllSlot")
            slots = payload.get("request", {}).get("intent", {}).get("slots", {})
            spoken_text = slots.get("CatchAllSlot", {}).get("value", "")
            
            if not spoken_text:
                return build_alexa_response("Não consegui ouvir o comando direito.")

            # Envia para o Claude interpretar
            claude_reply = process_with_claude(spoken_text)
            
            # TODO: Aqui entrará a lógica do Spotify!
            # Se o Claude retornar um JSON com artista/música, você chama a API do Spotify
            # e altera o texto de resposta para algo como "Tocando no Spotify..."
            
            return build_alexa_response(claude_reply, end_session=True)
            
        except Exception as e:
            print(f"Erro: {e}")
            return build_alexa_response("Houve um erro de comunicação com o servidor.")
            
    # 3. Quando a sessão é encerrada
    if req_type == "SessionEndedRequest":
        return {"version": "1.0", "response": {}}

def process_with_claude(text: str) -> str:
    """Envia o texto para a API da Anthropic e retorna a resposta pura"""
    try:
        message = client.messages.create(
            model="claude-3-5-sonnet-20240620",
            max_tokens=150,
            temperature=0.2, # Baixa temperatura para respostas lógicas e estruturadas
            system=(
                "Você é o cérebro de uma skill da Alexa. "
                "Responda de forma extremamente concisa, direta e em texto puro. "
                "Nunca use formatações como Markdown, asteriscos ou emojis. "
                "Se o usuário pedir para tocar uma música, extraia as informações e responda APENAS com "
                "o nome do Artista e da Música, para que um script futuro possa processar."
            ),
            messages=[
                {"role": "user", "content": text}
            ]
        )
        return message.content[0].text
    except Exception as e:
        print(f"Erro na API do Claude: {e}")
        return "Desculpe, o assistente inteligente está fora do ar no momento."

def build_alexa_response(text: str, end_session: bool = True):
    """Constrói o payload JSON exatamente como a Amazon Alexa exige"""
    return {
        "version": "1.0",
        "response": {
            "outputSpeech": {
                "type": "PlainText",
                "text": text
            },
            "shouldEndSession": end_session
        }
    }
