// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import "../RouteTypesV2.sol";
import "../LiquidityPoolETH.sol";

interface IEnhancedSwapRouterV2 {
    function executeRoute(RouteTypesV2.RoutePlan calldata plan) external payable returns (uint256 amountOut);

    function quoteConfiguredProviders(address tokenIn, address tokenOut, uint256 amountIn)
        external
        view
        returns (RouteTypesV2.ProviderQuote[] memory quotes);

    function quoteConfiguredProvider(
        address tokenIn,
        address tokenOut,
        uint256 amountIn,
        RouteTypesV2.Provider provider
    ) external view returns (RouteTypesV2.ProviderQuote memory quote);

    function swapTokenToToken(address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOutMin)
        external
        returns (uint256 amountOut);

    function swapToStablecoin(
        LiquidityPoolETH.AssetType inputAsset,
        address stablecoinToken,
        uint256 amountIn,
        uint256 amountOutMin
    ) external payable returns (uint256 amountOut);
}
