import { useState, useEffect } from "react";
import { JsonRpcProvider } from "@ethersproject/providers";
import { ProcessedTransaction } from "./types";
import { batchPopulate, ResolvedAddresses } from "./api/address-resolver";

export const useENSCache = (
  provider?: JsonRpcProvider,
  page?: ProcessedTransaction[]
) => {
  const [reverseCache, setReverseCache] = useState<ResolvedAddresses>();

  useEffect(() => {
    if (!provider || !page) {
      return;
    }

    const addrSet = new Set<string>();
    for (const tx of page) {
      if (tx.from) {
        addrSet.add(tx.from);
      }
      if (tx.to) {
        addrSet.add(tx.to);
      }
    }
    const addresses = Array.from(addrSet);

    const reverseResolve = async () => {
      const cache = await batchPopulate(provider, addresses);
      setReverseCache(cache);
    };
    reverseResolve();
  }, [provider, page]);

  return reverseCache;
};