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

/**
 * @title IRWATokenFactory
 * @notice Deploy and register M00 Li* RWA index tokens.
 */
interface IRWATokenFactory {
    struct RWAProductConfig {
        string indexTicker;
        string name;
        string symbol;
        uint8 decimals;
        string assetClass;
        string assetGroup;
        string instrumentType;
        string underlyingAsset;
        string gruLayer;
        string jurisdiction;
        address initialOwner;
        address complianceAdmin;
        address indexPublisher;
        uint256 initialIndexValue;
        uint256 initialSupply;
        bytes32 methodologyDocumentHash;
        bool registerInUniversalAssetRegistry;
    }

    function deployRWAIndex(RWAProductConfig calldata config) external returns (address token);

    function rwaTokenRegistry() external view returns (address);
    function universalAssetRegistry() external view returns (address);

    event RWAIndexDeployed(
        string indexed indexTicker,
        address indexed token,
        string symbol,
        address indexed owner
    );
}
