/**
 * Copyright (c) 2024-2026 Тарабанов Александр Викторович
 * All rights reserved.
 * 
 * This software is proprietary and confidential.
 * Unauthorized copying, modification, or distribution is prohibited.
 * 
 * For licensing inquiries: info@hb3-accelerator.com
 * Website: https://hb3-accelerator.com
 * GitHub: https://github.com/VC-HB3-Accelerator
 */

/**
 * Конфигурации сетей блокчейна для DLE
 * 
 * Author: HB3 Accelerator
 * For licensing inquiries: info@hb3-accelerator.com
 * Website: https://hb3-accelerator.com
 * GitHub: https://github.com/HB3-ACCELERATOR
 */

export const SUPPORTED_NETWORKS = {
  1: {
    chainId: '0x1',
    chainName: 'Ethereum Mainnet',
    nativeCurrency: {
      name: 'Ether',
      symbol: 'ETH',
      decimals: 18,
    },
    rpcUrls: ['https://mainnet.infura.io/v3/'],
    blockExplorerUrls: ['https://etherscan.io'],
  },
  11155111: {
    chainId: '0xaa36a7',
    chainName: 'Sepolia',
    nativeCurrency: {
      name: 'Sepolia Ether',
      symbol: 'ETH',
      decimals: 18,
    },
    rpcUrls: ['https://sepolia.infura.io/v3/', 'https://1rpc.io/sepolia'],
    blockExplorerUrls: ['https://sepolia.etherscan.io'],
  },
  17000: {
    chainId: '0x4268',
    chainName: 'Holesky',
    nativeCurrency: {
      name: 'Holesky Ether',
      symbol: 'ETH',
      decimals: 18,
    },
    rpcUrls: ['https://ethereum-holesky.publicnode.com'],
    blockExplorerUrls: ['https://holesky.etherscan.io'],
  },
  421614: {
    chainId: '0x66eee',
    chainName: 'Arbitrum Sepolia',
    nativeCurrency: {
      name: 'Arbitrum Sepolia Ether',
      symbol: 'ETH',
      decimals: 18,
    },
    rpcUrls: ['https://sepolia-rollup.arbitrum.io/rpc'],
    blockExplorerUrls: ['https://sepolia.arbiscan.io'],
  },
  84532: {
    chainId: '0x14a34',
    chainName: 'Base Sepolia',
    nativeCurrency: {
      name: 'Base Sepolia Ether',
      symbol: 'ETH',
      decimals: 18,
    },
    rpcUrls: ['https://sepolia.base.org'],
    blockExplorerUrls: ['https://sepolia.basescan.org'],
  },
  8453: {
    chainId: '0x2105',
    chainName: 'Base',
    nativeCurrency: {
      name: 'Base Ether',
      symbol: 'ETH',
      decimals: 18,
    },
    rpcUrls: ['https://mainnet.base.org'],
    blockExplorerUrls: ['https://basescan.org'],
  },
};

/**
 * Получить конфигурацию сети по chainId
 * @param {number|string} chainId - ID сети
 * @returns {Object|null} - Конфигурация сети или null
 */
export function getNetworkConfig(chainId) {
  const numericChainId = typeof chainId === 'string' ? parseInt(chainId, 16) : chainId;
  return SUPPORTED_NETWORKS[numericChainId] || null;
}

/**
 * Получить hex представление chainId
 * @param {number} chainId - ID сети
 * @returns {string} - Hex представление
 */
export function getHexChainId(chainId) {
  return `0x${chainId.toString(16)}`;
}

/**
 * Проверить, поддерживается ли сеть
 * @param {number|string} chainId - ID сети
 * @returns {boolean} - Поддерживается ли сеть
 */
export function isNetworkSupported(chainId) {
  return getNetworkConfig(chainId) !== null;
}
