import numpy as np
import sounddevice as sd
from scipy.io import wavfile
import time
import os

class OraculoTranscomunicador:
    def __init__(self, umbral_voz=0.5):
        self.fs = 44100  # Frecuencia profesional
        self.umbral = umbral_voz
        self.ruta_hallazgos = "hallazgos_eternos/"
        if not os.path.exists(self.ruta_hallazgos):
            os.makedirs(self.ruta_hallazgos)

    def captar_ruido_blanco(self, duracion=10):
        """Capta el ruido térmico del hardware con ganancia máxima"""
        print(f"† Escaneando el velo durante {duracion} segundos...")
        # Grabamos el silencio buscando la modulación del plano sutil
        grabacion = sd.rec(int(duracion * self.fs), samplerate=self.fs, channels=1)
        sd.wait()
        return grabacion.flatten()

    def analizar_señal(self, datos):
        """Algoritmo de detección de anomalía inteligente"""
        # Calculamos la energía de la señal
        energia = np.sqrt(np.mean(datos**2))
        
        # Un ruido blanco puro es constante. Una 'voz' causa picos de energía.
        # Si la desviación estándar es alta, hay una inteligencia modulando.
        desviacion = np.std(datos)
        
        if desviacion > self.umbral:
            return True, desviacion
        return False, desviacion

    def registrar_hallazgo(self, datos):
        nombre_archivo = f"{self.ruta_hallazgos}hallazgo_{int(time.time())}.wav"
        wavfile.write(nombre_archivo, self.fs, datos)
        print(f"¡ANOMALÍA DETECTADA! Guardada en: {nombre_archivo}")

# --- Bucle de Vigilia Eterna ---
if __name__ == "__main__":
    oraculo = OraculoTranscomunicador()
    print("† El Oráculo de Crisóstomo está en vigilia...")
    
    while True:
        muestra = oraculo.captar_ruido_blanco()
        es_voz, potencia = oraculo.analizar_señal(muestra)
        
        if es_voz:
            oraculo.registrar_hallazgo(muestra)
            # Aquí podrías integrar un envío a Gemini para que intente
            # transcribir lo que "oye" en ese ruido.
        else:
            print(f"Silencio en el umbral... (Potencia: {potencia:.6f})")