interface IPCVDeposit {
    // ----------- Events -----------
    event Deposit(address indexed _from, uint256 _amount);
    event Collect(address indexed _from, uint256 _amount0, uint256 _amount1);

    event Withdrawal(
        address indexed _caller,
        address indexed _to,
        uint256 _amount
    );

    // ----------- State changing api -----------

    function deposit() external payable;

    function collect() external returns (uint256 amount0, uint256 amount1);

    // ----------- PCV Controller only state changing api -----------

    function withdraw(address to, uint256 amount) external;

    function burnAndReset(uint24 _fee, int24 _tickLower, int24 _tickUpper) external;

    // ----------- Getters -----------

    function fee() external view returns (uint24);

    function tickLower() external view returns (int24);

    function tickUpper() external view returns (int24);

    function totalLiquidity() external view returns (uint128);
}
/// @title a PCV Deposit interface
/// @author Ring Protocol
function withdraw(address to, uint256 amount) external;

// ----------- PCV Controller only state changing api -----------