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

import {Test} from "forge-std/Test.sol";
import {TezosAdapter} from "../../../contracts/bridge/adapters/non-evm/TezosAdapter.sol";
import {IChainAdapter} from "../../../contracts/bridge/interfaces/IChainAdapter.sol";

contract TezosAdapterTest is Test {
    TezosAdapter public adapter;
    address public admin = address(0x1);
    address public oracle = address(0x2);
    address public user = address(0x3);

    function setUp() public {
        vm.startPrank(admin);
        adapter = new TezosAdapter(admin);
        adapter.grantRole(adapter.ORACLE_ROLE(), oracle);
        vm.stopPrank();
        vm.deal(user, 10 ether);
    }

    function test_getChainType() public view {
        assertEq(adapter.getChainType(), "Tezos");
    }

    function test_getChainIdentifier() public view {
        (uint256 chainId, string memory id) = adapter.getChainIdentifier();
        assertEq(chainId, 0);
        assertEq(id, "Tezos-Mainnet");
    }

    function test_validateDestination_valid() public view {
        string memory tz1 = "tz1VSUr8wwNhLAzempoch5d6hLRiTh8Cjcjb";
        assertTrue(adapter.validateDestination(bytes(tz1)));
    }

    function test_bridge_nativeAndConfirm() public {
        bytes memory dest = bytes("tz1VSUr8wwNhLAzempoch5d6hLRiTh8Cjcjb");
        vm.prank(user);
        bytes32 requestId = adapter.bridge{value: 1 ether}(address(0), 1 ether, dest, "");
        assertEq(uint256(adapter.getBridgeStatus(requestId).status), uint256(IChainAdapter.BridgeStatus.Locked));
        vm.prank(oracle);
        adapter.confirmTransaction(requestId, "opHash123");
        assertEq(uint256(adapter.getBridgeStatus(requestId).status), uint256(IChainAdapter.BridgeStatus.Confirmed));
    }
}
