import { isBoolean, isNonNegativeFiniteNumber, makeFixer } from './utils';

export type Metronome = {
  enabled: boolean;
  amplitude: number;
};

export const fixMetronomeAmplitude = makeFixer(isNonNegativeFiniteNumber, 1.0);

export const fixMetronomeEnabled = makeFixer(isBoolean, false);

export default function fixMetronome(metronome: unknown): Metronome {
  if (typeof metronome !== 'object' || metronome === null) {
    return {
      enabled: fixMetronomeEnabled(undefined),
      amplitude: fixMetronomeAmplitude(undefined),
    };
  }

  const m = metronome as { enabled: unknown; amplitude: unknown };
  m.enabled = fixMetronomeEnabled(m.enabled);
  m.amplitude = fixMetronomeAmplitude(m.amplitude);

  return metronome as Metronome;
}
