import httpx
import logging
from config.settings import settings

logger = logging.getLogger("agrota-audio-handler")

async def transcribe_whatsapp_audio(media_id: str) -> str:
    """
    Descarga un audio de WhatsApp y lo transcribe usando el servicio de IA.
    """
    try:
        # 1. Obtener la URL del medio desde WhatsApp
        token = settings.WHATSAPP_ACCESS_TOKEN
        if not token:
            logger.error("❌ WHATSAPP_ACCESS_TOKEN no encontrado en configuración.")
            return "[Configuración incompleta: falta Token]"
            
        logger.info(f"⏳ Obteniendo info de media WhatsApp: {media_id} | Token Prefix: {token[:8]}...")
        
        media_info_url = f"{settings.WHATSAPP_API_BASE_URL}/{settings.WHATSAPP_API_VERSION}/{media_id}"
        headers = {
            "Authorization": f"Bearer {token.strip()}"
        }
        
        async with httpx.AsyncClient() as client:
            logger.info(f"⏳ Consultando info de media WhatsApp: {media_id}")
            response = await client.get(media_info_url, headers=headers)
            response.raise_for_status()
            media_data = response.json()
            download_url = media_data.get("url")
            
            if not download_url:
                raise ValueError("No se pudo obtener la URL de descarga del audio.")
                
            # 2. Descargar el archivo binario
            logger.info("⏳ Descargando archivo de audio...")
            audio_response = await client.get(download_url, headers=headers)
            audio_response.raise_for_status()
            audio_bytes = audio_response.content
            
            # 3. Enviar a transcribir
            logger.info(f"⏳ Enviando a transcribir: {settings.TRANSCRIPTION_API_URL}")
            # Transcripción vía Multipart
            files = {'file': ('audio.ogg', audio_bytes, 'application/octet-stream')}
            transcribe_response = await client.post(
                settings.TRANSCRIPTION_API_URL,
                files=files,
                timeout=30.0
            )
            transcribe_response.raise_for_status()
            result = transcribe_response.json()
            
            # Extraer texto (asumiendo formato {"text": "..."} o {"transcripcion": "..."})
            text = result.get("text") or result.get("transcription") or result.get("transcripcion") or result.get("resultado", "")
            
            if not text:
                logger.warning(f"Transcripción vacía o formato desconocido: {result}")
                return "[Audio sin contenido inteligible]"
                
            logger.info(f"✅ Transcripción exitosa: {text[:50]}...")
            return text
            
    except Exception as e:
        logger.error(f"❌ Error en transcripción de audio: {e}")
        return "[Error al procesar el audio]"
    
    return "[Error inesperado en el procesamiento de audio]"
