// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.30;

import {IERC20} from "../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
import {IPartyPool} from "./IPartyPool.sol";
import {NativeWrapper} from "./NativeWrapper.sol";
import {PartyPoolMintImpl} from "./PartyPoolMintImpl.sol";
import {PartyPoolSwapImpl} from "./PartyPoolSwapImpl.sol";

interface IPartyPoolDeployer {

    struct DeployParams {
        address owner;
        string memory name;
        string memory symbol;
        IERC20[] memory tokens;
        int128 kappa;
        uint256[] memory fees;
        uint256 flashFeePpm;
        uint256 protocolFeePpm;
        address protocolFeeAddress;
        NativeWrapper wrapper;
        PartyPoolSwapImpl swapImpl;
        PartyPoolMintImpl mintImpl;
    }

    function deploy(DeployParams memory params) external returns (IPartyPool pool);

    function params() external returns (DeployParams memory params);
}


