import { ethers } from 'ethers';
import { Provider } from '@ethersproject/providers';
import { BaseApi } from './base-api';
import type { VideoPaymentStorage } from 'gotake-contracts/dist/typechain/contracts/VideoPayment';
import { TransactionOptions } from '../types';
export interface PurchaseResult {
    transactionHash: string;
    contentId: number;
    gasUsed?: ethers.BigNumber;
}
export interface ContentConfig {
    contentId: number;
    nativePrice: ethers.BigNumber;
    defaultViewCount: number;
    viewDuration: number;
    isActive: boolean;
}
export interface ViewPermission {
    purchaseTime: ethers.BigNumber;
    remainingViews: ethers.BigNumber;
    isValid: boolean;
}
export interface AdminRoleInfo {
    isOwner: boolean;
    isAdmin: boolean;
    canManageContent: boolean;
    canManageTokens: boolean;
    canManageAdmins: boolean;
}
export interface BatchPermissionResult {
    hasPermission: boolean;
    permissionDetails?: VideoPaymentStorage.ViewPermissionStructOutput;
}
/**
 * High-level API for VideoPayment contract interactions
 * Provides user-friendly interfaces for purchasing and managing video content
 */
export declare class VideoPaymentApi extends BaseApi {
    private _videoPaymentWrapper;
    /**
     * Create VideoPaymentApi instance
     * @param provider Provider instance
     * @param signer Signer instance
     */
    constructor(provider: Provider, signer: ethers.Signer);
    /**
     * Initialize VideoPayment wrapper
     */
    private getVideoPaymentWrapper;
    /**
     * Initialize the API
     */
    init(): Promise<void>;
    /**
     * Purchase content with specified payment method
     * @param contentId Content ID to purchase
     * @param paymentMethod Payment method: 'ETH' or 'ERC20'
     * @param tokenAddress ERC20 token address (required for ERC20 payment)
     * @param options Transaction options
     * @returns Purchase result
     */
    purchaseContent(contentId: number, paymentMethod: 'ETH' | 'ERC20', tokenAddress?: string, options?: TransactionOptions): Promise<PurchaseResult>;
    /**
     * Batch purchase multiple content items
     * @param contentIds Array of content IDs to purchase
     * @param paymentMethod Payment method: 'ETH' or 'ERC20'
     * @param tokenAddress ERC20 token address (required for ERC20 payment)
     * @param options Transaction options
     * @returns Purchase result
     */
    batchPurchaseContent(contentIds: number[], paymentMethod: 'ETH' | 'ERC20', tokenAddress?: string, options?: TransactionOptions): Promise<PurchaseResult>;
    /**
     * Check if current user has view permission for content
     * @param contentId Content ID
     * @returns True if user has valid view permission
     */
    hasViewPermission(contentId: number): Promise<boolean>;
    /**
     * Get current user's permission details for content
     * @param contentId Content ID
     * @returns View permission details
     */
    getMyPermissions(contentId: number): Promise<ViewPermission>;
    /**
 * Get content configuration information
 * @param contentId Content ID
 * @returns Content configuration
 */
    getContentInfo(contentId: number): Promise<ContentConfig>;
    /**
     * Batch get content information for multiple items
     * @param contentIds Array of content IDs
     * @returns Array of content configurations
     */
    batchGetContentInfo(contentIds: number[]): Promise<ContentConfig[]>;
    /**
     * Batch check user permissions for multiple content items
     * @param userAddress User address
     * @param contentIds Array of content IDs
     * @returns Array of permission results
     */
    batchCheckUserPermissions(userAddress: string, contentIds: number[]): Promise<BatchPermissionResult[]>;
    /**
     * Get current user's admin role information
     * @returns Admin role information
     */
    getMyAdminRole(): Promise<AdminRoleInfo>;
    /**
     * Set content configuration (Admin only)
     * @param config Content configuration
     * @param options Transaction options
     * @returns Transaction hash
     */
    setContentConfig(config: {
        contentId: number;
        nativePrice: string;
        defaultViewCount: number;
        viewDuration: number;
        isActive: boolean;
    }, options?: TransactionOptions): Promise<string>;
    /**
     * Batch set content configurations (Admin only)
     * @param configs Array of content configurations
     * @param options Transaction options
     * @returns Transaction hash
     */
    batchSetContentConfig(configs: {
        contentIds: number[];
        nativePrices: string[];
        defaultViewCounts: number[];
        viewDurations: number[];
        isActiveArray: boolean[];
    }, options?: TransactionOptions): Promise<string>;
    /**
     * Update content price (Admin only)
     * @param contentId Content ID
     * @param newPrice New price in ETH
     * @param options Transaction options
     * @returns Transaction hash
     */
    updateContentPrice(contentId: number, newPrice: ethers.BigNumber, options?: TransactionOptions): Promise<string>;
    /**
     * Set content active status (Admin only)
     * @param contentId Content ID
     * @param isActive Active status
     * @param options Transaction options
     * @returns Transaction hash
     */
    setContentActive(contentId: number, isActive: boolean, options?: TransactionOptions): Promise<string>;
    /**
     * Check if user has view permission (wrapper for external address)
     * @param userAddress User address
     * @param contentId Content ID
     * @returns True if user has valid view permission
     */
    userHasViewPermission(userAddress: string, contentId: number): Promise<boolean>;
    /**
     * Get user permissions (wrapper for external address)
     * @param userAddress User address
     * @param contentId Content ID
     * @returns View permission details
     */
    getUserPermissions(userAddress: string, contentId: number): Promise<ViewPermission>;
    /**
     * Process connection update
     */
    protected onConnectionUpdated(): Promise<void>;
}
//# sourceMappingURL=video-payment-api.d.ts.map