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

/**
 * @title IVault
 * @notice Interface for Vault contract
 * @dev Aave-style vault operations (deposit, borrow, repay, withdraw)
 */
interface IVault {
    /**
     * @notice Deposit M0 collateral into vault
     * @param asset Collateral asset address
     * @param amount Amount to deposit
     */
    function deposit(address asset, uint256 amount) external payable;

    /**
     * @notice Borrow eMoney against collateral
     * @param currency eMoney currency address
     * @param amount Amount to borrow
     */
    function borrow(address currency, uint256 amount) external;

    /**
     * @notice Repay borrowed eMoney
     * @param currency eMoney currency address
     * @param amount Amount to repay
     */
    function repay(address currency, uint256 amount) external;

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

    /**
     * @notice Get vault owner
     * @return owner Vault owner address
     */
    function owner() external view returns (address);

    /**
     * @notice Get vault health
     * @return healthRatio Collateralization ratio in basis points
     * @return collateralValue Total collateral value in XAU
     * @return debtValue Total debt value in XAU
     */
    function getHealth() external view returns (
        uint256 healthRatio,
        uint256 collateralValue,
        uint256 debtValue
    );

    event Deposited(address indexed asset, uint256 amount, address indexed depositor);
    event Borrowed(address indexed currency, uint256 amount, address indexed borrower);
    event Repaid(address indexed currency, uint256 amount, address indexed repayer);
    event Withdrawn(address indexed asset, uint256 amount, address indexed withdrawer);
}
