/**
 * Core type definitions for GoodTake SDK
 */
import { BigNumber } from 'ethers';
export interface GasConfig {
    gasLimit?: number | string | BigNumber;
    maxFeePerGas?: number | string | BigNumber;
    maxPriorityFeePerGas?: number | string | BigNumber;
    gasPriceMultiplier?: number;
    priorityFeeMultiplier?: number;
}
export interface TransactionOptions {
    gasConfig?: GasConfig;
}
export interface BaseTransactionParams {
    gasConfig?: GasConfig;
}
export declare enum VideoStatus {
    UPLOADING = "uploading",// Video is being uploaded to API server
    PROCESSING = "processing",// Video is being processed by Livepeer
    READY = "ready",// Video is processed and ready for viewing
    MINT_READY = "mint_ready",// Video is ready to mint NFT
    MINTING = "minting",// NFT is being minted
    COMPLETED = "completed",// Process completed successfully
    ERROR = "error"
}
export interface VideoMetadata {
    title?: string;
    description?: string;
    tags?: string[] | string;
}
export interface MediaInfo {
    seriesTitle: string;
    description: string;
    totalSeasons: BigNumber;
    totalEpisodes: BigNumber;
    genres: string[];
    creators: string[];
    createdAt: BigNumber;
    posterUri: string;
}
export interface MediaMetadata {
    title: string;
    description?: string;
    totalSeasons?: number;
    totalEpisodes?: number;
    genres?: string[];
    creators?: string[];
    posterUri?: string;
    thumbnailUrl?: string;
    creator?: string;
}
export interface IPInfo {
    title: string;
    description: string;
    ipType: number;
    createdAt: BigNumber;
}
export interface VideoStatusInfo {
    id: string;
    status: VideoStatus;
    progress?: number;
    message?: string;
    error?: {
        code: string;
        message: string;
    };
    assetInfo?: {
        assetId: string;
        playbackUrl?: string;
        thumbnailUrl?: string;
    };
    mintInfo?: {
        tokenId?: string;
        transactionHash?: string;
    };
    updated_at: string;
}
export type StatusCallback = (status: VideoStatusInfo) => void;
export interface Subscription {
    unsubscribe: () => void;
}
export interface MintOptions {
    royaltyPercentage?: number;
    extraMetadata?: Record<string, any>;
}
export interface MintResult {
    tokenId: string;
    transactionHash: string;
    owner: string;
    metadata: MediaInfo;
}
export interface PollController {
    stop: () => void;
}
export declare enum PaymentMethod {
    ETH = "ETH",
    ERC20 = "ERC20"
}
export interface ContentConfig {
    contentId: number;
    nativePrice: BigNumber;
    defaultViewCount: number;
    viewDuration: number;
    isActive: boolean;
}
export interface ViewPermission {
    purchaseTime: BigNumber;
    remainingViews: BigNumber;
    isValid: boolean;
}
export interface PurchaseParams {
    contentId: number;
    paymentMethod: PaymentMethod;
    tokenAddress?: string;
    amount?: string | number | BigNumber;
}
export interface PurchaseResult {
    transactionHash: string;
    contentId: number;
    purchaseTime: BigNumber;
    viewCount: BigNumber;
    validUntil: BigNumber;
    gasUsed?: BigNumber;
    error?: string;
}
export interface AdminContentParams {
    contentId: number;
    nativePrice: string | number | BigNumber;
    defaultViewCount: number;
    viewDuration: number;
    isActive: boolean;
}
export interface BatchContentParams {
    contentIds: number[];
    nativePrices: (string | number | BigNumber)[];
    defaultViewCounts: number[];
    viewDurations: number[];
    isActiveArray: boolean[];
}
export interface TokenPriceParams {
    contentId: number;
    tokenAddress: string;
    price: string | number | BigNumber;
}
export interface ContentInfo {
    contentId: number;
    nativePrice: BigNumber;
    defaultViewCount: number;
    viewDuration: number;
    isActive: boolean;
    tokenPrices: Record<string, BigNumber>;
}
export interface UserPermissionSummary {
    contentId: number;
    permission: ViewPermission;
    contentInfo: ContentInfo;
}
export interface BatchPurchaseParams {
    contentIds: number[];
    paymentMethod: PaymentMethod;
    tokenAddress?: string;
}
export interface BatchPermissionResult {
    contentId: number;
    hasPermission: boolean;
    permission?: ViewPermission;
    error?: string;
}
export interface AdminRoleInfo {
    isOwner: boolean;
    isAdmin: boolean;
    canManageContent: boolean;
    canManageTokens: boolean;
    canManageAdmins: boolean;
}
export interface ContentPurchasedEvent {
    user: string;
    contentId: number;
    paymentMethod: PaymentMethod;
    amount: BigNumber;
    timestamp: BigNumber;
}
export interface ViewConsumedEvent {
    user: string;
    contentId: number;
    remainingViews: number;
    timestamp: BigNumber;
}
export interface ContentConfigUpdatedEvent {
    contentId: number;
    nativePrice: BigNumber;
    defaultViewCount: number;
    viewDuration: number;
    isActive: boolean;
    timestamp: BigNumber;
}
export { VideoMetadata as OriginalVideoMetadata } from './utils/types';
//# sourceMappingURL=types.d.ts.map