import { Socket } from 'socket.io';
import { SocketEvent } from '../server-utils/socketMessageHandler.js';
import { detectDownbeatsAndBPM } from '../signal-processing/downbeats.js';
import { getSample } from './samples.js';

export const downbeatsMessageHandler = async (socket: Socket, message: any) => {
  const action = message.action as 'find';

  if (action === 'find') {
    const sample = await getSample(
      { uuid: message.request.uuid, asUser: (socket.request as any).user },
      { returnLength: true }
    );
    socket.emit(
      SocketEvent.Final,
      await detectDownbeatsAndBPM(sample, (progress: number) =>
        socket.emit(SocketEvent.Progress, [{ text: 'Analyzing', progress }])
      )
    );
    return;
  }

  socket.emit(SocketEvent.Final, { error: true, message: 'Unknown action' });
};
