interface IRewardsDistributor {
    // Structs
    struct PrincipalPerTimestamp {
        uint256 principal;
        uint256 time;
        uint256 timeListPointer;
    }

    function protocolPrincipal() external view returns (uint256);

    function pid() external view returns (uint256);

    // solhint-disable-next-line
    function EPOCH_DURATION() external pure returns (uint256);

    // solhint-disable-next-line
    function START_TIME() external view returns (uint256);

    // solhint-disable-next-line
    function Q1_REWARDS() external pure returns (uint256);

    // solhint-disable-next-line
    function DECAY_RATE() external pure returns (uint256);

    function updateProtocolPrincipal(uint256 _capital, bool _addOrSubstract) external;

    function getStrategyRewards(address _strategy) external view returns (uint96);

    function sendTokensToContributor(address _to, uint256 _amount) external;

    function startBABLRewards() external;

    function getRewards(
        address _garden,
        address _contributor,
        address[] calldata _finalizedStrategies
    ) external view returns (uint256[] memory);

    function getContributorPower(
        address _garden,
        address _contributor,
        uint256 _from,
        uint256 _to
    ) external view returns (uint256);

    function updateGardenPowerAndContributor(
        address _garden,
        address _contributor,
        uint256 _previousBalance,
        bool _depositOrWithdraw,
        uint256 _pid
    ) external;

    function tokenSupplyPerQuarter(uint256 quarter) external view returns (uint96);

    function checkProtocol(uint256 _time)
        external
        view
        returns (
            uint256 principal,
            uint256 time,
            uint256 quarterBelonging,
            uint256 timeListPointer,
            uint256 power
        );

    function checkQuarter(uint256 _num)
        external
        view
        returns (
            uint256 quarterPrincipal,
            uint256 quarterNumber,
            uint256 quarterPower,
            uint96 supplyPerQuarter
        );
}
/**
 * @title IRewardsDistributor
 * @author Babylon Finance
 *
 * Interface for the distribute rewards of the BABL Mining Program.
 */
function DECAY_RATE() external pure returns (uint256);

// solhint-disable-next-line