'use client';

import { create } from 'zustand';

export type RecordingState = 'idle' | 'recording' | 'paused' | 'stopped';

interface RecorderStore {
  state: RecordingState;
  audioBlob: Blob | null;
  audioUrl: string | null;
  duration: number;
  waveformData: number[];

  startRecording: () => void;
  stopRecording: (blob: Blob) => void;
  pauseRecording: () => void;
  resumeRecording: () => void;
  reset: () => void;
  setDuration: (duration: number) => void;
  setWaveformData: (data: number[]) => void;
}

export const useRecorderStore = create<RecorderStore>((set, get) => ({
  state: 'idle',
  audioBlob: null,
  audioUrl: null,
  duration: 0,
  waveformData: [],

  startRecording: () =>
    set({
      state: 'recording',
      audioBlob: null,
      audioUrl: null,
      duration: 0,
      waveformData: [],
    }),

  stopRecording: (blob: Blob) => {
    const url = URL.createObjectURL(blob);
    set({ state: 'stopped', audioBlob: blob, audioUrl: url });
  },

  pauseRecording: () => set({ state: 'paused' }),

  resumeRecording: () => set({ state: 'recording' }),

  reset: () => {
    const { audioUrl } = get();
    if (audioUrl) URL.revokeObjectURL(audioUrl);
    set({
      state: 'idle',
      audioBlob: null,
      audioUrl: null,
      duration: 0,
      waveformData: [],
    });
  },

  setDuration: (duration) => set({ duration }),

  setWaveformData: (data) => set({ waveformData: data }),
}));
