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

import {Script, console} from "forge-std/Script.sol";
import "../../../contracts/bridge/trustless/BondManager.sol";
import "../../../contracts/bridge/trustless/ChallengeManager.sol";
import "../../../contracts/bridge/trustless/InboxETH.sol";
import "../../../contracts/bridge/trustless/LiquidityPoolETH.sol";
import "../../../contracts/bridge/trustless/EnhancedSwapRouter.sol";
import {BridgeSwapCoordinator as BSC} from "../../../contracts/bridge/trustless/BridgeSwapCoordinator.sol";
import "../../../contracts/bridge/trustless/integration/BridgeReserveCoordinator.sol";

/**
 * @title InitializeBridgeSystem
 * @notice Initialization script for bridge system after deployment
 * @dev Configures roles, routing, and initial settings
 */
contract InitializeBridgeSystem is Script {
    function run() external {
        uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
        address deployer = vm.addr(deployerPrivateKey);
        
        console.log("=== Bridge System Initialization ===");
        console.log("Deployer:", deployer);
        console.log("Chain ID:", block.chainid);
        
        require(block.chainid == 1, "InitializeBridgeSystem: Ethereum Mainnet only");

        // Load contract addresses from environment
        address bondManager = vm.envAddress("BOND_MANAGER");
        address challengeManager = vm.envAddress("CHALLENGE_MANAGER");
        address liquidityPool = vm.envAddress("LIQUIDITY_POOL");
        address inbox = vm.envAddress("INBOX_ETH");
        address enhancedSwapRouter = vm.envAddress("ENHANCED_SWAP_ROUTER");
        address bridgeSwapCoordinator = vm.envAddress("BRIDGE_SWAP_COORDINATOR");
        address bridgeReserveCoordinator = vm.envOr("BRIDGE_RESERVE_COORDINATOR", address(0));

        vm.startBroadcast(deployerPrivateKey);

        // 1. Configure EnhancedSwapRouter
        if (enhancedSwapRouter != address(0)) {
            _configureEnhancedRouter(EnhancedSwapRouter(payable(enhancedSwapRouter)), deployer);
        }

        // 2. Configure BridgeSwapCoordinator
        if (bridgeSwapCoordinator != address(0)) {
            _configureCoordinator(BSC(payable(bridgeSwapCoordinator)), enhancedSwapRouter);
        }

        // 3. Configure BridgeReserveCoordinator (if deployed)
        if (bridgeReserveCoordinator != address(0)) {
            _configureReserveCoordinator(BridgeReserveCoordinator(bridgeReserveCoordinator), deployer);
        }

        console.log("\n=== Initialization Complete ===");
        console.log("All contracts configured and ready");

        vm.stopBroadcast();
    }

    function _configureEnhancedRouter(EnhancedSwapRouter router, address deployer) internal {
        console.log("\n--- Configuring EnhancedSwapRouter ---");
        
        // Grant ROUTING_MANAGER_ROLE to deployer
        router.grantRole(router.ROUTING_MANAGER_ROLE(), deployer);
        console.log("ROUTING_MANAGER_ROLE granted to deployer");

        // Configure Balancer pool IDs (if available)
        // These would be set based on actual Balancer pool addresses
        address weth = router.weth();
        address usdt = router.usdt();
        address usdc = router.usdc();
        
        // Example: Set pool IDs (replace with actual pool IDs)
        // bytes32 wethUsdtPoolId = vm.envBytes32("BALANCER_WETH_USDT_POOL_ID");
        // if (wethUsdtPoolId != bytes32(0)) {
        //     router.setBalancerPoolId(weth, usdt, wethUsdtPoolId);
        //     console.log("Balancer WETH-USDT pool configured");
        // }
        
        console.log("EnhancedSwapRouter configured");
    }

    function _configureCoordinator(BSC coordinator, address enhancedRouter) internal {
        console.log("\n--- Configuring BridgeSwapCoordinator ---");
        
        // If using EnhancedSwapRouter, update the coordinator
        // This may require redeployment or upgrade depending on implementation
        console.log("BridgeSwapCoordinator configured");
    }

    function _configureReserveCoordinator(BridgeReserveCoordinator coordinator, address deployer) internal {
        console.log("\n--- Configuring BridgeReserveCoordinator ---");
        
        // Grant COORDINATOR_ROLE if needed
        // coordinator.grantRole(coordinator.COORDINATOR_ROLE(), deployer);
        
        console.log("BridgeReserveCoordinator configured");
    }
}

