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

/**
 * @title IBurnController
 * @notice Interface for burning ISO-4217 W tokens on redemption
 * @dev Burn-before-release sequence for on-demand redemption at par
 */
interface IBurnController {
    /**
     * @notice Redeem tokens (burn and release fiat)
     * @param token Token address
     * @param from Redeemer address
     * @param amount Amount to redeem (in token decimals)
     * @return redemptionId Redemption ID for tracking
     */
    function redeem(address token, address from, uint256 amount) external returns (bytes32 redemptionId);

    /**
     * @notice Burn tokens without redemption (emergency/transfer)
     * @param token Token address
     * @param from Source address
     * @param amount Amount to burn
     */
    function burn(address token, address from, uint256 amount) external;

    /**
     * @notice Check if redemption is allowed
     * @param token Token address
     * @param amount Amount to redeem
     * @return redeemable True if redemption is allowed
     */
    function canRedeem(address token, uint256 amount) external view returns (bool redeemable);

    event Redeemed(
        address indexed token,
        address indexed from,
        uint256 amount,
        bytes32 indexed redemptionId
    );
    event Burned(address indexed token, address indexed from, uint256 amount);
}
