import { get } from 'lodash';
import HasSettings from './HasSettings';

export default abstract class AudioDevice<SettingsType> extends HasSettings<SettingsType> {
  sampleRate: number;
  numberOfChannels: number;
  initialize? (): void

  constructor(sampleRate: number, numberOfChannels: number, givenSettings?: SettingsType) {
    super(givenSettings);
    this.sampleRate = sampleRate;
    this.numberOfChannels = numberOfChannels;
    if (this.initialize) {
      this.initialize();
    }
  }

  loadPreset (preset: {[key: string]: any}) {
    Object.entries(preset).forEach(([path, value]) => {
      const setting = get(this.settings, path);
      if (!setting) {
        console.log(this.settings);
        throw new Error(`No setting ${path} found`);
      }
      setting.value = value;
    });
  }
}
