import type { Token } from "@/types/index";
import type { Address } from "viem";
import pkg from "../../package.json";

const NATIVE_TOKEN_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
const NATIVE_SOLANA_TOKEN_ADDRESS =
	"So11111111111111111111111111111111111111112";
const PERMIT2_ADDRESS = "0x000000000022d473030f116ddee9f6b43ac78ba3" as Address;
const CURRENT_VERSION = pkg.version;

const SOLANA_CHAIN_ID = 89999;

const SLOW_ROUTE_THRESHOLD = 3600; // in seconds

// The below addresses are owned by Socket and are used as dummy addresses to fetch quotes without requiring a wallet connection.
const DUMMY_ADDRESS = "0x18Cc6F90512C6D95ACA0d57F98C727D61873c06a";
const DUMMY_SOLANA_ADDRESS = "2sqEHhLQowjSb8MgY7qAW3j2eZ7EmxHQLNB666ZNPrGr";

// Default source token: USDC on Base
const DEFAULT_SOURCE_TOKEN: Token = {
	chainId: 8453,
	address: "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
	name: "USDC",
	symbol: "USDC",
	decimals: 6,
	logoURI:
		"https://assets.coingecko.com/coins/images/6319/large/usdc.png?1696506694",
	isVerified: true,
};

const USDC_LIST = [
	"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", // Ethereum
	"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", // Avax
	"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", // Polygon
	"0xaf88d065e77c8cC2239327C5EDb3A432268e5831", // Arbitrum
	"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85", // OP
	"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // Base
	"0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4", // zkSync Era
	"0xa8CE8aee21bC2A48a5EF670afCc9274C7bbbC035", // Polygon zkEVM
	"0x29219dd400f2bf60e5a23d13be72b486d4038894", // Sonic
	// "0xddafbb505ad214d7b80b1f830fccc89b60fb7a83", // Gnosis USDC
	"0x2a22f9c3b484c3629090FeED35F17Ff8F88f76F0", // Gnosis USDC.e
	"0x09bc4e0d864854c6afb6eb9a9cdf58ac190d0df9", // Mantle
	"0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", // BSC
	//   "0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409", // BSC FDUSD
	// "0x211Cc4DD073734dA055fbF44a2b4667d5E5fE5d2", // Linea sUSDe
	"0x176211869cA2b568f2A7D4EE941E073a821EE1ff", // Linea USDC
	"0xe343167631d89B6Ffc58B88d6b7fB0228795491D", // Ink USDG
	"0x078D782b760474a361dDA0AF3839290b0EF57AD6", // Unichain USDC
	"0x84A71ccD554Cc1b02749b35d22F684CC8ec987e1", // Abstract USD.e
	//   "0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34", // Mode USDe
	"0x549943e04f40284185054145c6E4e9568C1D3241", // Bera USDC.e
	"0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4", // USDC (Scroll)
	"0xbA9986D2381edf1DA03B0B9c1f8b00dc4AacC369", // USDC.e (Soneium)
	"0x79A02482A880bCE3F13e09Da970dC34db4CD24d1", // USDC.e (World Chain)
	"0x78adD880A697070c1e765Ac44D65323a0DcCE913", // USDCe (Plume)
	"0xe15fC38F6D8c56aF07bbCBe3BAf5708A2Bf42392", // USDC (Sei)
	"0x203A662b0BD271A6ed5a60EdFbd04bFce608FD36", // USDCe (Katana)
	"0xb88339CB7199b77E23DB6E890353E22632Ba630f", // USDC (HyperEVM)
	"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC (Solana)
	"0x754704bc059f8c67012fed69bc8a327a5aafb603", // USDC (Monad)
];

const USDT_LIST = [
	"0xdAC17F958D2ee523a2206206994597C13D831ec7", // Ethereum
	"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", // Solana
	"0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7", // Avax
	"0xc2132D05D31c914a87C6611C10748AEb04B58e8F", // Polygon
	"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", // Arbitrum
	"0x01bFF41798a0BcF287b996046Ca68b395DbC1071", // OP
	"0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2", // Base
	"0x493257fD37EDB34451f62EDf8D2a0C418852bA4C", // zkSync Era
	"0xf55BEC9cafDbE8730f096Aa55dad6D22d44099Df", // Scroll
	"0x55d398326f99059fF775485246999027B3197955", // BSC
	"0xA219439258ca9da29E9Cc4cE5596924745e12B93", // Linea
	"0x0200C29006150606B650577BBE7B6248F58470c1", // Ink USDT0
	"0x9151434b16b9763660705744891fA906F660EcC5", // Unichain/Sei USDT0
	"0x0709F39376dEEe2A2dfC94A58EdEb2Eb9DF012bD", // Abstract
	"0x102d758f688a4C1C5a80b116bD945d4455460282", // Mode USDT0
	"0xf0F161fDA2712DB8b566946122a5af183995e2eD", // Mode USDT
	"0x779Ded0c9e1022225f8E0630b35a9b54bE713736", // Bera USDT0
	"0x3A337a6adA9d885b6Ad95ec48F9b75f197b5AE35", // Soneium USDT
	"0xda6087E69C51E7D31b6DBAD276a3c44703DFdCAd", // Plume USDT
	"0x2DCa96907fde857dd3D816880A0df407eeB2D2F2", // USDT (Katana)
	"0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb", // HyperEVM USDT0
	"0xe7cd86e13ac4309349f30b3435a9d337750fc82d", // Monad USDT0
];

const EUR_LIST = [
	"0xcb444e90d8198415266c6a2724b7900fb12fc56e", // Gnosis
];

// 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c WBNB
// 0x6b856a14CeA1d7dCfaF80fA6936c0b75972cCacE FXS
// 0x52869bae3E091e36b0915941577F2D47d8d8B534 LINK (zkSync Era)
// 0x9A4c8cD493CF0Bf8e14BdA5890e3F03A1cDed719 ORDERLY (Abstract)
// 0x183E3691EfF3524B2315D3703D94F922CbE51F54 LINK (Mode)
// 0x6969696969696969696969696969696969696969 WBERA
// 0x93202eC683288a9EA75BB829c6baCFb2BfeA9013 LINK (Blast)
// 0x548C6944cba02B9D1C0570102c89de64D258d3Ac LINK (Scroll)
// 0x2cFc85d8E48F8EAB294be644d9E25C3030863003 WLD (World Chain)

export {
	NATIVE_TOKEN_ADDRESS,
	NATIVE_SOLANA_TOKEN_ADDRESS,
	PERMIT2_ADDRESS,
	CURRENT_VERSION,
	DUMMY_ADDRESS,
	DUMMY_SOLANA_ADDRESS,
	SOLANA_CHAIN_ID,
	USDC_LIST,
	USDT_LIST,
	EUR_LIST,
	SLOW_ROUTE_THRESHOLD,
	DEFAULT_SOURCE_TOKEN,
};
