// @flow
import React from 'react';
import { lighthouse } from 'redux/actions/search';
import { getSearchQueryString } from 'util/query-params';
import { isURIValid } from 'util/lbryURI';
import useThrottle from './use-throttle';

export default function useLighthouse(
  query: string,
  showMature: boolean,
  size: number = 5,
  additionalOptions: any = {},
  throttleMs: number = 500
) {
  const [results, setResults] = React.useState();
  const [loading, setLoading] = React.useState();
  const queryString = query ? getSearchQueryString(query, { nsfw: showMature, size, ...additionalOptions }) : '';
  const throttledQuery = useThrottle(queryString, throttleMs);

  React.useEffect(() => {
    if (throttledQuery) {
      setLoading(true);
      setResults(null);

      let isSubscribed = true;
      lighthouse
        .search(throttledQuery)
        .then(({ body: results }) => {
          if (isSubscribed) {
            setResults(
              results.map((result) => `lbry://${result.name}#${result.claimId}`).filter((uri) => isURIValid(uri))
            );
            setLoading(false);
          }
        })
        .catch(() => {
          setLoading(false);
        });

      return () => {
        isSubscribed = false;
      };
    }
  }, [throttledQuery]);

  return { results, loading };
}