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

import "@openzeppelin/contracts/access/AccessControl.sol";
import "./WLPReceiptToken.sol";
import "./interfaces/IWLPProgramEvents.sol";

/**
 * @title WLPRedemptionGateway
 * @notice Burns wLP from user and emits `RedemptionRequested` for relayers to release LP on Chain 138.
 * @dev Relayer observes event, submits `Chain138LPLocker.release*` on 138. Fungible wLP + secondary trading
 *      may break 1:1 depositor-only redemption; production may require NFT receipts or curated policy.
 */
contract WLPRedemptionGateway is AccessControl, IWLPProgramEvents {
    bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE");

    WLPReceiptToken public immutable wlp;

    constructor(address wlp_, address admin) {
        require(wlp_ != address(0) && admin != address(0), "Gateway: zero");
        wlp = WLPReceiptToken(wlp_);
        _grantRole(DEFAULT_ADMIN_ROLE, admin);
    }

    /**
     * @notice User burns wLP; relayer fulfills LP release on 138 per operational policy.
     */
    function requestRedeem(uint256 wlpAmount) external {
        require(wlpAmount > 0, "Gateway: zero");
        wlp.burn(msg.sender, wlpAmount);
        emit RedemptionRequested(msg.sender, wlpAmount);
    }
}
