import { useCallback, useState } from 'react';

import { useStores } from '@/app/(root)/AppProviders';

type Filters = {
  isUpload?: boolean;
};

type Props = {
  filters?: Filters;
};

export function useLibrary({ filters }: Props) {
  const { apiClient } = useStores();
  const [currentPage, setCurrentPage] = useState(0);
  const [hasMore, setHasMore] = useState(false);
  const [error, setError] = useState<any>(null);
  const loadNextPage = useCallback(
    async (pageToLoad?: number) => {
      const { data, error: responseError } = await apiClient.GET(
        '/api/feed/v2',
        {
          params: {
            query: {
              page: pageToLoad ?? currentPage + 1,
              is_uploaded_audio: filters?.isUpload,
            },
          },
        }
      );

      if (responseError) {
        setError(responseError);
        return null;
      } else if (error) {
        setError(null);
      }

      setCurrentPage(data.current_page);
      setHasMore(data.has_more ?? false);
      return data.clips;
    },
    [currentPage]
  );

  return {
    currentPage,
    hasMore,
    loadNextPage,
    error,
  };
}
