import { useCallback } from 'react';
import { getUserReactionsCount } from '@livelike/javascript';
import { userReactionStoreActions } from '../store/userReaction';

export type UseLoadUserReactionsArg = {
  reactionSpaceId: string;
};

export function useLoadUserReactions({
  reactionSpaceId,
}: UseLoadUserReactionsArg) {
  const loadUserReactions = useCallback(
    ({ targetIds }: { targetIds: string[] }) => {
      if (targetIds.length === 0 || !reactionSpaceId) {
        return;
      }

      const loadUserReactionCountData = async () => {
        const { results: _userReactions } = await getUserReactionsCount({
          targetIds,
          reactionSpaceId,
        });
        const reducedUserReactions = _userReactions.reduce(
          (accReactions, reaction) => {
            accReactions[reaction.target_id] = reaction.reactions.reduce(
              (a, r) => {
                a[r.reaction_id] = r;
                return a;
              },
              {}
            );
            return accReactions;
          },
          {}
        );
        userReactionStoreActions.loadUserReactionAction({
          reactionSpaceId,
          targetUserReactions: reducedUserReactions,
        });
      };

      loadUserReactionCountData();
    },
    [reactionSpaceId]
  );

  return { loadUserReactions };
}
