// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "forge-std/Script.sol";
import "../../contracts/registry/UniversalAssetRegistry.sol";
import "../../contracts/sync/TokenlistGovernanceSync.sol";

/**
 * @title Migrate Existing Assets
 * @notice Migrate tokens from existing system to universal bridge
 */
contract MigrateExistingAssets is Script {
    function run() external {
        uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
        
        address registry = vm.envAddress("UNIVERSAL_ASSET_REGISTRY");
        address tokenlistSync = vm.envAddress("TOKENLIST_GOVERNANCE_SYNC");
        
        console.log("Migrating existing assets...");
        console.log("");
        
        vm.startBroadcast(deployerPrivateKey);
        
        UniversalAssetRegistry assetRegistry = UniversalAssetRegistry(registry);
        
        // Migrate existing tokens from tokenlist
        // Example: WETH9
        console.log("1. Migrating WETH9...");
        bytes32 weth9Proposal = assetRegistry.proposeAsset(
            0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,
            UniversalAssetRegistry.AssetType.ERC20Standard,
            UniversalAssetRegistry.ComplianceLevel.Public,
            "Wrapped Ether",
            "WETH",
            18,
            "Global",
            30, // Low-medium volatility
            1e15,
            1000000e18
        );
        console.log("   Proposal ID:", vm.toString(weth9Proposal));
        
        // Example: LINK
        console.log("2. Migrating LINK...");
        bytes32 linkProposal = assetRegistry.proposeAsset(
            0x362E9a45Ef6e554760f9671938235Cbc9b6E80Ed,
            UniversalAssetRegistry.AssetType.ERC20Standard,
            UniversalAssetRegistry.ComplianceLevel.Public,
            "Chainlink Token",
            "LINK",
            18,
            "Global",
            50, // Medium volatility
            1e15,
            1000000e18
        );
        console.log("   Proposal ID:", vm.toString(linkProposal));
        
        // Vote and execute (if admin mode)
        console.log("3. Voting on proposals...");
        assetRegistry.voteOnProposal(weth9Proposal, true);
        assetRegistry.voteOnProposal(linkProposal, true);
        console.log("   Voted");
        
        // Fast-forward time for testing (remove in production)
        if (block.chainid == 31337 || block.chainid == 138) { // Local or test chain
            vm.warp(block.timestamp + 2 days);
            
            console.log("4. Executing proposals...");
            assetRegistry.executeProposal(weth9Proposal);
            assetRegistry.executeProposal(linkProposal);
            console.log("   Executed");
        }
        
        vm.stopBroadcast();
        
        console.log("");
        console.log("================================");
        console.log("Migration Complete!");
        console.log("================================");
        console.log("");
        console.log("Migrated Assets:");
        console.log("- WETH9: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2");
        console.log("- LINK: 0x362E9a45Ef6e554760f9671938235Cbc9b6E80Ed");
        console.log("");
        console.log("Note: On mainnet, wait for timelock before executing");
    }
}
