// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "@openzeppelin/contracts/interfaces/IERC165.sol"; import "../../contract-registry/IContractEntity.sol"; import "../tax-terms-registry/ITaxTermsRegistry.sol"; import "../../renting/Rentings.sol"; interface ITaxController is IERC165, IContractEntity { /** * @dev Calculates rental tax based on renting params and implemented taxation strategy. * @param taxTermsParams Listing tax strategy override params. * @param rentingParams Renting params. * @param taxableAmount Total taxable amount. * @return universeBaseTax Universe rental tax (taxableAmount * universeBaseTax / 100%). * @return protocolBaseTax Protocol rental tax (taxableAmount * protocolBaseTax / 100%). * @return universeTaxTerms Universe tax terms. * @return protocolTaxTerms Protocol tax terms. */ function calculateRentalTax( ITaxTermsRegistry.Params calldata taxTermsParams, Rentings.Params calldata rentingParams, uint256 taxableAmount ) external view returns ( uint256 universeBaseTax, uint256 protocolBaseTax, ITaxTermsRegistry.TaxTerms memory universeTaxTerms, ITaxTermsRegistry.TaxTerms memory protocolTaxTerms ); /** * @dev Returns implemented listing tax strategy ID. * @return Taxation strategy ID. */ function strategyId() external pure returns (bytes4); }