import { type FanItemsContinuation } from '../types/Fan.js';
import type Fan from '../types/Fan.js';
import { type ImageFormat } from '../types/Image.js';
import { FanContinuationItemsResult, type FanItemParseOptions, FanPageItemsResult } from './FanItemsBaseParser.js';
import type Album from '../types/Album.js';
import type Track from '../types/Track.js';
import type UserKind from '../types/UserKind.js';
import type Tag from '../types/Tag.js';
import type Limiter from '../utils/Limiter.js';
import BaseAPIWithImageSupport, { type BaseAPIWithImageSupportParams } from '../common/BaseAPIWithImageSupport.js';
export { FanPageItemsResult, FanContinuationItemsResult };
export interface FanAPIGetInfoParams {
    username?: string;
    imageFormat: string | number | ImageFormat;
}
export interface FanAPIGetItemsParams {
    target?: string | FanItemsContinuation;
    imageFormat?: string | number | ImageFormat;
}
/**
 * @internal
 */
export interface FanAPIGetItemsFullParams<T> extends FanAPIGetItemsParams {
    defaultImageFormat: number;
    continuationUrl?: string;
    parsePageFn: (html: string, opts: FanItemParseOptions) => FanPageItemsResult<T>;
    parseContinuationFn: (json: any, continuation: FanItemsContinuation, opts: FanItemParseOptions) => FanContinuationItemsResult<T>;
}
export default class FanAPI extends BaseAPIWithImageSupport {
    getInfo(params: FanAPIGetInfoParams): Promise<Fan>;
    getCollection(params: FanAPIGetItemsParams): Promise<FanPageItemsResult<NonNullable<Track | Album | null>> | FanContinuationItemsResult<NonNullable<Track | Album | null>>>;
    getWishlist(params: FanAPIGetItemsParams): Promise<FanPageItemsResult<NonNullable<Track | Album | null>> | FanContinuationItemsResult<NonNullable<Track | Album | null>>>;
    getFollowingArtistsAndLabels(params: FanAPIGetItemsParams): Promise<FanPageItemsResult<UserKind> | FanContinuationItemsResult<UserKind>>;
    getFollowingGenres(params: FanAPIGetItemsParams): Promise<FanPageItemsResult<Tag> | FanContinuationItemsResult<Tag>>;
    /**
     * @internal
     */
    protected getItems<T>(params: FanAPIGetItemsFullParams<T>): Promise<FanPageItemsResult<T> | FanContinuationItemsResult<T>>;
    /**
     * @internal
     */
    protected static getFanPageUrl(username: string): string;
    /**
     * @internal
     */
    protected static isContinuation(target: any): target is FanItemsContinuation;
    /**
     * @internal
     */
    protected getLoggedInFanUsername(): Promise<string>;
}
export declare class LimiterFanAPI extends FanAPI {
    #private;
    constructor(params: BaseAPIWithImageSupportParams & {
        limiter: Limiter;
    });
    getInfo(params: FanAPIGetInfoParams): Promise<Fan>;
    getCollection(params: FanAPIGetItemsParams): Promise<FanPageItemsResult<NonNullable<Album | Track | null>> | FanContinuationItemsResult<NonNullable<Album | Track | null>>>;
    getWishlist(params: FanAPIGetItemsParams): Promise<FanPageItemsResult<NonNullable<Album | Track | null>> | FanContinuationItemsResult<NonNullable<Album | Track | null>>>;
    getFollowingArtistsAndLabels(params: FanAPIGetItemsParams): Promise<FanPageItemsResult<UserKind> | FanContinuationItemsResult<UserKind>>;
    getFollowingGenres(params: FanAPIGetItemsParams): Promise<FanPageItemsResult<Tag> | FanContinuationItemsResult<Tag>>;
}
//# sourceMappingURL=FanAPI.d.ts.map