import { ethers } from 'ethers';
import { Provider } from '@ethersproject/providers';
import { BaseTransactionWrapper } from './base-transaction-wrapper';
import { MintResult, TransactionOptions, MediaInfo, MediaMetadata, IPInfo } from '../types';
/**
 * Wrapper for IPNFT contract, used for minting and managing IP NFTs
 */
export declare class IPNFTWrapper extends BaseTransactionWrapper {
    private _ipnft;
    /**
     * Create IPNFT wrapper instance
     * @param provider Provider instance
     * @param signer Signer instance
     */
    constructor(provider: Provider, signer: ethers.Signer);
    /**
     * Get IPNFT contract instance
     * @returns IPNFT contract instance
     */
    private getIPNFT;
    /**
     * Mint a new IPNFT (New Contract Interface)
     * @param to Recipient address
     * @param uri Metadata URI
     * @param options Transaction options
     * @returns Transaction object and minted NFT ID
     */
    mint(to: string, uri: string, options?: TransactionOptions): Promise<{
        tx: ethers.ContractTransaction;
        tokenId: ethers.BigNumber;
    }>;
    /**
     * Set media information for a token
     * @param tokenId Token ID
     * @param mediaData Media information data
     * @param options Transaction options
     * @returns Transaction object
     */
    setMediaInfo(tokenId: ethers.BigNumber | number | string, mediaData: {
        seriesTitle: string;
        description: string;
        totalSeasons: number;
        totalEpisodes: number;
        genres: string[];
        creators: string[];
        posterUri: string;
    }, options?: TransactionOptions): Promise<ethers.ContractTransaction>;
    /**
     * Get media information (New Contract Interface)
     * @param tokenId NFT ID
     * @returns Media information
     */
    getMediaInfo(tokenId: ethers.BigNumber | number | string): Promise<MediaInfo>;
    /**
     * Mint with metadata (Convenience method that combines mint and setMediaInfo)
     * @param to Recipient address
     * @param uri Metadata URI
     * @param metadata Media metadata
     * @param options Transaction options
     * @returns Transaction object and minted NFT ID
     */
    mintWithMetadata(to: string, uri: string, metadata: MediaMetadata, options?: TransactionOptions): Promise<{
        tx: ethers.ContractTransaction;
        tokenId: ethers.BigNumber;
        setInfoTx?: ethers.ContractTransaction;
    }>;
    /**
     * Legacy mint method (for backward compatibility)
     * @deprecated Use mintWithMetadata instead
     */
    legacyMint(to: string, uri: string, title: string, description: string, ipType?: number, options?: TransactionOptions): Promise<{
        tx: ethers.ContractTransaction;
        tokenId: ethers.BigNumber;
    }>;
    /**
     * Get URI for a specific NFT
     * @param tokenId NFT ID
     * @returns NFT's metadata URI
     */
    tokenURI(tokenId: ethers.BigNumber | number | string): Promise<string>;
    /**
     * Check if a specific address is the owner of a specific NFT
     * @param address Address to check
     * @param tokenId NFT ID
     * @returns true if the address is the owner; otherwise false
     */
    isOwnerOf(address: string, tokenId: ethers.BigNumber | number | string): Promise<boolean>;
    /**
     * Get the owner of a specific NFT
     * @param tokenId NFT ID
     * @returns Owner address
     */
    ownerOf(tokenId: ethers.BigNumber | number | string): Promise<string>;
    /**
     * Legacy getIPInfo method (for backward compatibility)
     * @deprecated Use getMediaInfo instead
     * @param tokenId NFT ID
     * @returns IP information
     */
    getIPInfo(tokenId: ethers.BigNumber | number | string): Promise<IPInfo>;
    /**
     * Convert contract NFT details to MintResult (Updated for new contract)
     * @param details NFT details from contract
     * @param tx Transaction object
     * @returns Formatted mint result
     */
    formatMintResult(details: {
        tokenId: ethers.BigNumber;
        uri: string;
        owner: string;
        mediaInfo: MediaInfo;
    }, tx: ethers.ContractTransaction): MintResult;
    /**
     * Update connection information (when network changes)
     * @param provider New Provider
     * @param signer New Signer
     */
    updateConnection(provider: Provider, signer: ethers.Signer): void;
}
//# sourceMappingURL=ipnft-wrapper.d.ts.map