// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import "./IPolicyModule.sol"; /** * @title IPolicyEngine * @notice Interface for policy engine * @dev Aggregates policy decisions from multiple modules */ interface IPolicyEngine { /** * @notice Emitted when a policy module is registered * @param module Module address * @param name Module name */ event PolicyModuleRegistered(address indexed module, string name); /** * @notice Emitted when a policy module is unregistered * @param module Module address */ event PolicyModuleUnregistered(address indexed module); /** * @notice Register a policy module * @param module Module address */ function registerPolicyModule(address module) external; /** * @notice Unregister a policy module * @param module Module address */ function unregisterPolicyModule(address module) external; /** * @notice Evaluate all registered policy modules * @param actionType Type of action * @param actionData Action-specific data * @return allowed True if all modules allow the action * @return reason Reason for denial (if any module denies) */ function evaluateAll( bytes32 actionType, bytes memory actionData ) external view returns (bool allowed, string memory reason); /** * @notice Get all registered policy modules * @return modules Array of module addresses */ function getPolicyModules() external view returns (address[] memory modules); /** * @notice Check if a module is registered * @param module Module address * @return registered True if registered */ function isRegistered(address module) external view returns (bool registered); }