import { JsonRpcProvider, JsonRpcSigner } from "@ethersproject/providers";
import { useEffect, useMemo, useState } from "react";
import { useAccount } from "wagmi";
import { useEthersSigner } from "./clientToSigner";
import { DEFAULT_SOURCE_CHAIN_ID } from "@src/constants";

export interface Network {
  networkName: string;
  chainId: string;
  address?: string;
}
export interface EvmNetwork extends Network {
  provider?: JsonRpcProvider;
  signer?: JsonRpcSigner;
}

export const useNetworks = (): {
  networks: {
    evm: EvmNetwork;
  };
} => {
  const [signer, setSigner] = useState<JsonRpcSigner>();

  const ethersSigner = useEthersSigner();

  useEffect(() => {
    ethersSigner.then((signer) => setSigner(signer));
  }, [ethersSigner]);

  // Evm
  const account = useAccount();

  const evm = useMemo(
    () => ({
      networkName: "EVM",
      chainId: account.chainId?.toString() || DEFAULT_SOURCE_CHAIN_ID,
      address: account.address,
      signer: signer,
      provider: signer?.provider,
    }),
    [account.address, account.chainId, signer],
  );

  return {
    networks: { evm },
  };
};

export default useNetworks;
