import {AudioRecorderBacked, DeviceList, IDevice, setRecorderBackend} from "tc-shared/audio/recorder";
import {AbstractInput, LevelMeter} from "tc-shared/voice/RecorderBase";
import {inputDeviceList} from "../audio/InputDeviceList";
import {NativeInput, NativeLevelMeter} from "../audio/AudioRecorder";

setRecorderBackend(new class implements AudioRecorderBacked {
    createInput(): AbstractInput {
        return new NativeInput();
    }

    async createLevelMeter(device: IDevice): Promise<LevelMeter> {
        const meter = new NativeLevelMeter(device);
        await meter.initialize();
        return meter;
    }

    getDeviceList(): DeviceList {
        return inputDeviceList;
    }

    isRnNoiseSupported(): boolean {
        return true;
    }

    toggleRnNoise(target: boolean) {
        NativeLevelMeter.instances.forEach(input => input.nativeConsumer.toggle_rnnoise(target));
        NativeInput.instances.forEach(input => input.nativeConsumer.toggle_rnnoise(target));
    }
});