interface ICollateralSettler {
	/// @notice Allows a user to claim collateral for a `dest` address by sending agTokens and gov tokens (optional)
	/// @param dest Address of the user to claim collateral for
	/// @param amountAgToken Amount of agTokens sent
	/// @param amountGovToken Amount of governance sent
	/// @dev The more gov tokens a user sends, the more preferably it ends up being treated during the redeem period
	function claimUser(
		address dest,
		uint256 amountAgToken,
		uint256 amountGovToken
	) external;

	/// @notice Allows a HA to claim collateral by sending a `perpetualID` and gov tokens (optional)
	/// @param perpetualID Perpetual owned by the HA
	/// @param amountGovToken Amount of governance sent
	/// @dev The contract automatically recognizes the beneficiary of the perpetual
	function claimHA(uint256 perpetualID, uint256 amountGovToken) external;

	/// @notice Allows a SLP to claim collateral for an address `dest` by sending sanTokens and gov tokens (optional)
	/// @param dest Address to claim collateral for
	/// @param amountSanToken Amount of sanTokens sent
	/// @param amountGovToken Amount of governance tokens sent
	function claimSLP(
		address dest,
		uint256 amountSanToken,
		uint256 amountGovToken
	) external;

	/// @notice Computes the base amount each category of claim will get after the claim period has ended
	/// @dev This function can only be called once when claim period is over
	/// @dev It is at the level of this function that the waterfall between the different
	/// categories of stakeholders and of claims is executed
	function setAmountToRedistributeEach() external;

	/// @notice Lets a user or a LP redeem its corresponding share of collateral
	/// @param user Address of the user to redeem collateral to
	/// @dev This function can only be called after the `setAmountToRedistributeEach` function has been called
	/// @dev The entry point to redeem is the same for users, HAs and SLPs
	function redeemCollateral(address user) external;
}
/// @title ICollateralSettler
/// @notice Interface for the collateral settlement contracts that are used when a collateral is getting revoked
function redeemCollateral(address user) external;

/// @notice Lets a user or a LP redeem its corresponding share of collateral
/// @param user Address of the user to redeem collateral to
/// @dev This function can only be called after the `setAmountToRedistributeEach` function has been called
/// @dev The entry point to redeem is the same for users, HAs and SLPs