import { PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js';

interface AnchorWallet {
    publicKey: PublicKey;
    signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T>;
    signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]>;
}
type ETFTokenConstituent = {
    token: string;
    weight: number;
};
type ETFCreateParams = {
    name: string;
    symbol: string;
    description: string;
    url: string;
    assets: ETFTokenConstituent[];
};
type ETFBurnParams = {
    etfAddress: string;
    lamports: number | bigint;
};
/**
 * purchase share parameters
 * lamports use Solana standard precision (9 digits)
 * for example: purchase 1 full share = 1000000000 (1e9)
 * purchase 0.5 share = 500000000 (5e8)
 */
type MintETFTokenParams = {
    etfAddress: string;
    lamports: number;
};
interface ETFCreateResult {
    success: boolean;
    txid?: string;
    error?: string;
    data?: {
        etfAddress?: PublicKey;
        etfCoreAddress?: PublicKey;
        symbol?: string;
        name?: string;
        description?: string;
        creator?: string;
        assets?: Array<{
            token: PublicKey;
            weight: number;
        }>;
    };
}
type MintETFResult = {
    success: boolean;
    txid: string;
    error?: string;
    data?: {
        mintTokenataAccount?: PublicKey;
        balance: number;
        etfAddress: string;
    };
};

export type { AnchorWallet as A, ETFCreateParams as E, MintETFTokenParams as M, ETFBurnParams as a, ETFCreateResult as b, MintETFResult as c };
