import {
  WidgetKind,
  claimPredictionWidgetRewards,
  hasDebugLogger,
} from '@livelike/javascript';
import { useEffect, useRef } from 'react';
import { widgetStoreActions } from '../store';
import { useWidgetInteractions } from './useWidgetInteractions';

export type UsePredictionClaimRewardEffectArg = {
  widgetId: string;
  widgetKind: WidgetKind;
};

/**
 * @description `usePredictionClaimRewardEffect` hook claims the prediction reward
 * whenever a prediction follow up based UI is rendered.
 * Internally it calls claimPredictionWidgetRewards JS API.
 */
export function usePredictionClaimRewardEffect({ widgetId, widgetKind }) {
  const claimedRef = useRef(null);
  const widgetInteracions = useWidgetInteractions({ widgetId });
  const widgetInteraction = widgetInteracions?.[0];

  useEffect(() => {
    if (claimedRef.current) {
      claimedRef.current = false;
    }
  }, [widgetId, widgetKind]);

  useEffect(() => {
    if (claimedRef.current || !widgetInteraction) {
      return;
    }
    claimPredictionWidgetRewards({ widgetId, widgetKind })
      .then((res) => {
        claimedRef.current = true;
        widgetStoreActions.updateWidgetRewardsAction({
          widgetId,
          widgetRewards: res.rewards,
        });
      })
      .catch((error) => {
        hasDebugLogger() && console.error('Error while claiming reward', error);
      });
  }, [widgetId, widgetKind, widgetInteraction]);
}
