// @flow
import React from 'react';
import { LIVESTREAM_LIVE_API } from 'constants/livestream';

/**
 * Gets latest livestream info list. Returns null (instead of a blank object)
 * when there are no active livestreams.
 *
 * @param minViewers
 * @param refreshMs
 * @returns {{livestreamMap: null, loading: boolean}}
 */
export default function useGetLivestreams(minViewers: number = 0, refreshMs: number = 0) {
  const [loading, setLoading] = React.useState(true);
  const [livestreamMap, setLivestreamMap] = React.useState(null);

  React.useEffect(() => {
    function checkCurrentLivestreams() {
      fetch(LIVESTREAM_LIVE_API)
        .then((res) => res.json())
        .then((res) => {
          setLoading(false);
          if (!res.data) {
            setLivestreamMap(null);
            return;
          }

          const livestreamMap = res.data.reduce((acc, curr) => {
            if (curr.viewCount >= minViewers) {
              acc[curr.claimId] = curr;
            }
            return acc;
          }, {});

          setLivestreamMap(livestreamMap);
        })
        .catch((err) => {
          setLoading(false);
        });
    }

    checkCurrentLivestreams();

    if (refreshMs > 0) {
      let fetchInterval = setInterval(checkCurrentLivestreams, refreshMs);
      return () => {
        if (fetchInterval) {
          clearInterval(fetchInterval);
        }
      };
    }
  }, []);

  return { livestreamMap, loading };
}
