/********
 *
 * test-alys
 *
 * V2:
 *
 * WALYS/Dai:0x821C1FE4fE2700fc138377cBcb04E823dd2a717d
 * WALYS/USDT:0x028a5fdb725C90333EF8162f9a7A1dDA7C52769C
 * WALYS/USDC:0x83e9cdc4F70B1114E8bDaee928C7D000C39470b2
 * USDT/USDC:0x5b13e4F93323941Ad952b4f9E1468D83166c5237
 *
 *
 *
 * Linea-sepolia
 *
 * V2 :
 * USDT/USDC:   0x214605812f6221a337b509Df464B4E5b8B8f01dE
 * WETH/USDT:  0xcC5dd3C193f9714B9c13d8E9ba9AE7b4F6F9788A
 * WETH/USDC: 0x791DB2751bbE2acDC6A7e469761fACC13F25C8a4
 *
 * V3:
 * USDC/USDT(500): 0x2135C71480561B93645D20bBDF1146354A08bb9F
 * USDC/USDT(3000): 0x8B185C3d5b42EfD6C430ae6a3b489Ad96EA2faA1
 * USDC/USDT(10000): 0x28AccE8B1f695b1131727c5aDFeb5aa689782729
 *
 * WALYS/USDC(500):  0x9C09D1aeB552A9b0Ab393F1Bd921aB099F821F16
 * WALYS/USDC(3000): 0xa05387c7150EfcD878CDf0732eA9c3d5179860BC
 * WALYS/USDC(10000): 0xf67F7AB70BC258cbE2d4CB7B2532A29789e2bFe9
 *
 *
 * WALYS/USDT(500):  0x5bca4A50559848218BDA7DE4a3D5B4Ccd9Eb8a1D
 * WALYS/USDT(3000): 0x987a02Bb62770Fe3E4c128960509005854B9C013
 * WALYS/USDT(10000): 0xeFe0DbB6E500C3d9F8239fBE683DFB258Af351a9
 *
 * *****/
import {network} from "hardhat";

export enum NETWORK {
    talys = 'ALYS_ALPHA',
    linea_sepolia = 'LINEA_SEPOLIA',
}

export enum ChainId {
    MAINNET = 1,
    RINKEBY = 4,
    SEPOLIA = 11155111,
    LINEA_SEPOLIA = 59141,
    ALYS_ALPHA = 212121,
};

// export const CurrentChainID = ChainId.ALYS_ALPHA;
export const CurrentChainID = getChainId();

/**
 * 根据 --network 参数获取对应的 ChainId
 */
export function getChainId(): number {
    const networkName = network.name;
    const networkKey = NETWORK[networkName as keyof typeof NETWORK];
    if (networkKey === undefined) return ChainId.ALYS_ALPHA;
    return ChainId[networkKey];
}

export type MarketToken = { WALYS: string, Dai: string, USDT: string, USDC: string, WBTC: string};
export const ERC20_TOKEN_LISTS: Array<string> = ["WALYS", "Dai", "USDT", "USDC", "WBTC", "TBTC"];
export const VERTO_SWAP_NAMES: Array<string> = ["V2FACTORY", "INITIALHASH", "V2ROUTER", "FEE_ON_TRANSFER_DETECTOR", "Token_VALIDATOR_ADDRESS","ROUTER01","ROUTER02"];
export const DEPLOYER = "0x627306090abaB3A6e1400e9345bC60c78a8BEf57";
export const INIT_HASH_CODE = "0xeeb682ecf9822f8680f593f26e4ee01931f717f61c92d6cbb50626ea4c81a08f";


type ERC20Token = typeof ERC20_TOKEN_LISTS[number];
type VertoSwapName = typeof VERTO_SWAP_NAMES[number];

export type CurrencyToken = Record<keyof MarketToken, string>;
export type VertoSwapContractAddr = Record<VertoSwapName, string>;

const _ERC20_TOKENS: { [chainId: number]: CurrencyToken } = {
    [ChainId.ALYS_ALPHA]: {
        WALYS: "0x0158dfed32446c7A2f5E9BaD16F3A2f86f1952dE",
        Dai: "0x969d1126FA409D44cd0A9261CB8bDE40Daa3e83b",
        USDT: "0xEc7A3fd3e4Ce411f867dD982E710b0Ef61F67958",
        USDC: "0x8587691Fd9712f9B09385F0bBFC3872343D10ED9",
        WBTC: "",
    },
    [ChainId.LINEA_SEPOLIA]: {
        WALYS: "0xF12b5dd4EAD5F743C6BaA640B0216200e89B60Da",
        Dai: "0x345cA3e014Aaf5dcA488057592ee47305D9B3e10",
        USDT: "0xf25186B5081Ff5cE73482AD761DB0eB0d25abfBF",
        USDC: "0x8f0483125FCb9aaAEFA9209D8E9d7b9C8B9Fb90F",
        WBTC: "",
    },
};

const VERTO_SWAP_ADDRESSES: { [chainId: number]: VertoSwapContractAddr } = {
    [ChainId.ALYS_ALPHA]: {
        V2FACTORY: "0xF7f913cf0E7E45C2BF1f0a91610E63ec15300C6F",
        UniswapV2Library: "",
        V2INITIALHASH: "",
        V2ROUTER: "",

        FEE_ON_TRANSFER_DETECTOR: "",
        TOKEN_VALIDATOR_ADDRESS: "",

        VERTOFACTORY: "",
        NONFUNGIBLETOKENPOSITIONDESCRIPTOR: "",
        NONFUNGIBLEPOSITIONMANAGERADDRESS: "",
        TICKLENSADDRESS: "",
        V3MIGRATORADDRESS: "",
        QUOTER: "",
        QUOTER2: "",
        VERTOMULTICALL: "0x75c35C980C0d37ef46DF04d31A140b65503c0eEd",
        SWAPROUTER: "",
        ROUTER01:"0x82D50AD3C1091866E258Fd0f1a7cC9674609D254",
        ROUTER02:"0xdDA6327139485221633A1FcD65f4aC932E60A2e1",
    },
    [ChainId.LINEA_SEPOLIA]: {
        V2FACTORY: "0x9eFec315E368e8812025B85b399a69513Cd0e716",
        UniswapV2Library: "0x23e84570f7b28aD0d5E5545d398009194a8734f3",
        V2INITIALHASH: "53723e4e3f283ad6da1a958aca530d8e28cb7491424adfd3b77f8620878f06f1",
        V2ROUTER: "0xbbE595Df857805ab3734f15BE990f9A30CBB89F3",

        FEE_ON_TRANSFER_DETECTOR: "0xC7c8C0B1DE01285b15bF4023A921926700ed9c03",
        TOKEN_VALIDATOR_ADDRESS: "0x8EFA7b48b74320B9dD70f85157293BeA2D31d56f",

        VERTOFACTORY: "0x2C2B9C9a4a25e24B174f26114e8926a9f2128FE4",
        NONFUNGIBLETOKENPOSITIONDESCRIPTOR: "0xFB88dE099e13c3ED21F80a7a1E49f8CAEcF10df6",
        NONFUNGIBLEPOSITIONMANAGERADDRESS: "0xAa588d3737B611baFD7bD713445b314BD453a5C8",
        TICKLENSADDRESS: "0xf204a4Ef082f5c04bB89F7D5E6568B796096735a",
        V3MIGRATORADDRESS: "0x75c35C980C0d37ef46DF04d31A140b65503c0eEd",
        QUOTER: "0xB529f14AA8096f943177c09Ca294Ad66d2E08b1f",
        QUOTER2: "0xA4392264a2d8c998901D10C154C91725b1BF0158",
        VERTOMULTICALL: "0x3d49d1eF2adE060a33c6E6Aa213513A7EE9a6241",
        SWAPROUTER: "0x82D50AD3C1091866E258Fd0f1a7cC9674609D254",
    },
};

export const ERC20_TOKENS = _ERC20_TOKENS[CurrentChainID];
export const VERTO_SWAP_ADDRESS = VERTO_SWAP_ADDRESSES[CurrentChainID];
