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

/**
 * @title ICollateralAdapter
 * @notice Interface for Collateral Adapter
 * @dev Handles M0 collateral deposits and withdrawals
 */
interface ICollateralAdapter {
    /**
     * @notice Deposit M0 collateral
     * @param vault Vault address
     * @param asset Collateral asset address
     * @param amount Amount to deposit
     */
    function deposit(address vault, address asset, uint256 amount) external payable;

    /**
     * @notice Withdraw M0 collateral
     * @param vault Vault address
     * @param asset Collateral asset address
     * @param amount Amount to withdraw
     */
    function withdraw(address vault, address asset, uint256 amount) external;

    /**
     * @notice Seize collateral during liquidation
     * @param vault Vault address
     * @param asset Collateral asset address
     * @param amount Amount to seize
     * @param liquidator Liquidator address
     */
    function seize(address vault, address asset, uint256 amount, address liquidator) external;

    event CollateralDeposited(address indexed vault, address indexed asset, uint256 amount);
    event CollateralWithdrawn(address indexed vault, address indexed asset, uint256 amount);
    event CollateralSeized(address indexed vault, address indexed asset, uint256 amount, address indexed liquidator);
}
