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

/**
 * @title ICrossChainFlashBridge
 * @notice Minimal surface for “pull `token` from msg.sender then initiate CCIP / bridge”.
 * @dev Wire to `UniversalCCIPFlashBridgeAdapter` (→ `UniversalCCIPBridge.bridge`), a dedicated adapter, or a mock in tests.
 *      Implementations MUST pull from `msg.sender` (e.g. `transferFrom`) up to `amount` after allowance.
 *      For `UniversalCCIPFlashBridgeAdapter`, optional `extraData` encodes
 *      `(bytes32 assetType, bool usePMM, bool useVault, bytes complianceProof, bytes vaultInstructions)`; empty uses zeros/false.
 */
interface ICrossChainFlashBridge {
    function bridgeTokensFrom(
        address token,
        uint256 amount,
        uint64 destinationChainSelector,
        address recipientOnDestination,
        bytes calldata extraData
    ) external payable returns (bytes32 messageId);
}
