import apiClient from './client';
import type { ApiResponse, CreatePracticeRequest, Practice, QueryParams } from '@/types';

export const practiceApi = {
  getMyPracticesByVerse: async (verseId: string, params?: QueryParams) => {
    const response = await apiClient.get<ApiResponse<Practice[]>>(
      `/practices/my-practices/verse/${verseId}`,
      { params }
    );
    return response.data.data;
  },

  createPractice: async (data: CreatePracticeRequest) => {
    const formData = new FormData();
    formData.append('audio', data.audio);
    formData.append('durationSeconds', data.durationSeconds.toString());

    const response = await apiClient.post<ApiResponse<Practice>>(
      `/practices/verse/${data.verseId}`,
      formData,
      {
        headers: { 'Content-Type': 'multipart/form-data' },
        onUploadProgress: (progressEvent) => {
          const progress = progressEvent.total
            ? Math.round((progressEvent.loaded * 100) / progressEvent.total)
            : 0;
          window.dispatchEvent(
            new CustomEvent('upload-progress', { detail: { progress } })
          );
        },
      }
    );
    return response.data.data;
  },
};
