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

/**
 * @title IDodoexRouter
 * @notice Interface for Dodoex PMM (Proactive Market Maker) Router
 * @dev Dodoex uses PMM which provides better price discovery and lower slippage
 */
interface IDodoexRouter {
    struct DodoSwapParams {
        address fromToken;
        address toToken;
        uint256 fromTokenAmount;
        uint256 minReturnAmount;
        address[] dodoPairs; // Dodo PMM pool addresses
        uint256 directions; // 0 = base to quote, 1 = quote to base
        bool isIncentive; // Whether to use incentive mechanism
        uint256 deadLine;
    }

    /**
     * @notice Swap tokens via Dodoex PMM
     * @param params Swap parameters
     * @return receivedAmount Amount received after swap
     */
    function dodoSwapV2TokenToToken(
        DodoSwapParams calldata params
    ) external returns (uint256 receivedAmount);

    /**
     * @notice Get quote for swap (view function)
     * @param fromToken Source token
     * @param toToken Destination token
     * @param fromTokenAmount Amount to swap
     * @return toTokenAmount Expected output amount
     */
    function getDodoSwapQuote(
        address fromToken,
        address toToken,
        uint256 fromTokenAmount
    ) external view returns (uint256 toTokenAmount);
}

