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

/**
 * @title ILiquidation
 * @notice Interface for Liquidation Module
 * @dev Handles liquidation of undercollateralized vaults
 */
interface ILiquidation {
    /**
     * @notice Liquidate an undercollateralized vault
     * @param vault Vault address to liquidate
     * @param currency Debt currency address
     * @param maxDebt Maximum debt to liquidate
     * @return seizedCollateral Amount of collateral seized
     * @return repaidDebt Amount of debt repaid
     */
    function liquidate(
        address vault,
        address currency,
        uint256 maxDebt
    ) external returns (uint256 seizedCollateral, uint256 repaidDebt);

    /**
     * @notice Check if a vault can be liquidated
     * @param vault Vault address
     * @return canLiquidate True if vault can be liquidated
     * @return healthRatio Current health ratio in basis points
     */
    function canLiquidate(address vault) external view returns (bool canLiquidate, uint256 healthRatio);

    /**
     * @notice Get liquidation bonus (penalty)
     * @return bonus Liquidation bonus in basis points
     */
    function liquidationBonus() external view returns (uint256);

    event VaultLiquidated(
        address indexed vault,
        address indexed currency,
        uint256 seizedCollateral,
        uint256 repaidDebt,
        address indexed liquidator
    );
}
