// Copyright (c) Mysten Labs, Inc.
// SPDX-License-Identifier: Apache-2.0

import { SuiClient, SuiHTTPTransport, getFullnodeUrl } from '@mysten/sui.js/client';

export enum Network {
	LOCAL = 'LOCAL',
	DEVNET = 'DEVNET',
	TESTNET = 'TESTNET',
	MAINNET = 'MAINNET',
}

export const NetworkConfigs: Record<Network, { url: string }> = {
  [Network.LOCAL]: { url: getFullnodeUrl("localnet") },
  [Network.DEVNET]: { url: getFullnodeUrl("devnet") },
  [Network.TESTNET]: { url: getFullnodeUrl("testnet") },
  [Network.MAINNET]: { url: getFullnodeUrl("mainnet") },
};

const defaultClientMap: Map<Network | string, SuiClient> = new Map();

// NOTE: This class should not be used directly in React components, prefer to use the useSuiClient() hook instead
export const createSuiClient = (network: Network | string) => {
	const existingClient = defaultClientMap.get(network);
	if (existingClient) return existingClient;

	const networkUrl = network in Network ? NetworkConfigs[network as Network].url : network;

	const client = new SuiClient({
    transport: new SuiHTTPTransport({ url: networkUrl }),
  });
	defaultClientMap.set(network, client);
	return client;
};
