require('dotenv').config();
const {ethers} = require("hardhat");
const hre = require("hardhat");

async function main() {
    const network = hre.network.name;
    let permit2;
    let weth;
    if (network === "ethereum" || network === "tenderly_ethereum") {
        permit2 = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
        weth = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2";
    } else if (network === "base" || network === "tenderly_base") {
        // permit2 address is the same as on ethereum
        permit2 = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
        weth = "0x4200000000000000000000000000000000000006";
    } else {
        throw new Error(`Unsupported network: ${network}`);
    }

    console.log(`Deploying TychoRouter to ${network} with:`);
    console.log(`- permit2: ${permit2}`);
    console.log(`- weth: ${weth}`);

    const [deployer] = await ethers.getSigners();
    console.log(`Deploying with account: ${deployer.address}`);
    console.log(`Account balance: ${ethers.utils.formatEther(await deployer.getBalance())} ETH`);

    const TychoRouter = await ethers.getContractFactory("TychoRouter");
    const router = await TychoRouter.deploy(permit2, weth);

    await router.deployed();
    console.log(`TychoRouter deployed to: ${router.address}`);

    // Verify on Tenderly
    try {
        console.log("Verifying contract on Tenderly...");
        await hre.tenderly.verify({
            name: "TychoRouter",
            address: router.address,
        });
        console.log("Contract verified successfully on Tenderly");
    } catch (error) {
        console.error("Error during contract verification:", error);
    }

    console.log("Waiting for 1 minute before verifying the contract...");
    await new Promise(resolve => setTimeout(resolve, 60000));

    // Verify on Etherscan
    try {
        await hre.run("verify:verify", {
            address: router.address,
            constructorArguments: [permit2, weth],
        });
        console.log(`TychoRouter verified successfully on Etherscan!`);
    } catch (error) {
        console.error(`Error during Etherscan verification:`, error);
    }

}

main()
    .then(() => process.exit(0))
    .catch((error) => {
        console.error("Deployment failed:", error);
        process.exit(1);
    });