import type { z } from 'zod';
import type { AuthService, StorageService } from '../../services';
import { EntityManagerService, AdvancedOptions } from '../../services/EntityManager/types';
import type { LoggerService } from '../../services/Logger';
import { Configuration, PlaylistsApi as GeneratedPlaylistsApi } from '../generated/default';
import { AddTrackToPlaylistRequest, CreatePlaylistRequest, createUpdatePlaylistSchema, createUploadPlaylistSchema, DeletePlaylistRequest, PlaylistMetadata, PublishPlaylistRequest, RemoveTrackFromPlaylistRequest, RepostPlaylistRequest, FavoritePlaylistRequest, UnfavoritePlaylistRequest, UpdatePlaylistRequest, UploadPlaylistRequest } from './types';
export declare class PlaylistsApi extends GeneratedPlaylistsApi {
    private readonly storage;
    private readonly entityManager;
    private readonly auth;
    private readonly logger;
    private readonly trackUploadHelper;
    constructor(configuration: Configuration, storage: StorageService, entityManager: EntityManagerService, auth: AuthService, logger: LoggerService);
    /** @hidden
     * Create a playlist from existing tracks
     */
    createPlaylist(params: CreatePlaylistRequest, advancedOptions?: AdvancedOptions): Promise<{
        playlistId: string | null;
        blockHash: string;
        blockNumber: number;
    }>;
    /** @hidden
     * Upload a playlist
     * Uploads the specified tracks and combines them into a playlist
     */
    uploadPlaylist(params: UploadPlaylistRequest, advancedOptions?: AdvancedOptions): Promise<{
        playlistId: string | null;
        blockHash: string;
        blockNumber: number;
    }>;
    /** @hidden
     * Publish a playlist
     * Changes a playlist from private to public
     */
    publishPlaylist(params: PublishPlaylistRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Add a single track to the end of a playlist
     * For more control use updatePlaylist
     */
    addTrackToPlaylist(params: AddTrackToPlaylistRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Removes a single track at the given index of playlist
     * For more control use updatePlaylist
     */
    removeTrackFromPlaylist(params: RemoveTrackFromPlaylistRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Update a playlist
     */
    updatePlaylist(params: UpdatePlaylistRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Delete a playlist
     */
    deletePlaylist(params: DeletePlaylistRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Favorite a playlist
     */
    favoritePlaylist(params: FavoritePlaylistRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Unfavorite a playlist
     */
    unfavoritePlaylist(params: UnfavoritePlaylistRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Repost a playlist
     */
    repostPlaylist(params: RepostPlaylistRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Unrepost a playlist
     */
    unrepostPlaylist(params: FavoritePlaylistRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @internal
     * Combines the metadata for a track and a collection (playlist or album),
     * taking the metadata from the playlist when the track is missing it.
     */
    private combineMetadata;
    /** @internal
     * Update helper method that first fetches a playlist and then updates it
     */
    private fetchAndUpdatePlaylist;
    /** @internal
     * Method to upload a playlist with already parsed inputs
     * This is used for both playlists and albums
     */
    uploadPlaylistInternal<Metadata extends PlaylistMetadata>({ userId, coverArtFile, trackFiles, onProgress, metadata, trackMetadatas }: z.infer<ReturnType<typeof createUploadPlaylistSchema>> & {
        metadata: Metadata;
    }, advancedOptions?: AdvancedOptions): Promise<{
        playlistId: string | null;
        blockHash: string;
        blockNumber: number;
    }>;
    /** @internal
     * Method to update a playlist with already parsed inputs
     * This is used for both playlists and albums
     */
    updatePlaylistInternal<Metadata extends Partial<PlaylistMetadata>>({ userId, playlistId, coverArtFile, onProgress, metadata }: z.infer<ReturnType<typeof createUpdatePlaylistSchema>> & {
        metadata: Metadata;
    }, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
}
