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

import {Script, console2} from "forge-std/Script.sol";
import {GRUVaultIndex} from "../../../contracts/vault/GRUVaultIndex.sol";

interface IGRUVaultIndexLegacy {
    function allVaults(uint256 index) external view returns (address);
    function vaults(address vault)
        external
        view
        returns (
            address entity,
            address baseToken,
            address depositToken,
            address debtToken,
            uint8 gruTier,
            bytes32 ibanHash,
            bytes32 policyProfileKey,
            uint256 recordedAt,
            bool active
        );
}

/// @notice Import one legacy vault record into new GRUVaultIndex (use GRU_MIGRATE_INDEX).
contract ImportGruVaultRecord138 is Script {
    function run() external {
        uint256 pk = vm.envUint("PRIVATE_KEY");
        address oldIndex = vm.envAddress("OLD_GRU_VAULT_INDEX");
        address newIndex = vm.envAddress("NEW_GRU_VAULT_INDEX");
        bytes32 policyKey = vm.envBytes32("GRU_POLICY_PROFILE_KEY");
        uint256 idx = vm.envUint("GRU_MIGRATE_INDEX");

        IGRUVaultIndexLegacy legacy = IGRUVaultIndexLegacy(oldIndex);
        GRUVaultIndex target = GRUVaultIndex(newIndex);

        address vault;
        try legacy.allVaults(idx) returns (address v) {
            vault = v;
        } catch {
            revert("ImportGruVaultRecord138: index out of range");
        }

        (
            address entity,
            address baseToken,
            address depositToken,
            address debtToken,
            uint8 gruTier,
            bytes32 ibanHash,
            bytes32 existingKey,
            uint256 recordedAt,
            bool active
        ) = legacy.vaults(vault);
        require(active, "ImportGruVaultRecord138: inactive");

        bytes32 key = existingKey == bytes32(0) ? policyKey : existingKey;

        vm.startBroadcast(pk);
        target.importVault(
            vault, entity, baseToken, depositToken, debtToken, gruTier, ibanHash, key, recordedAt
        );
        vm.stopBroadcast();
        console2.log("Imported", vault, "policy", vm.toString(key));
    }
}
