import type { z } from 'zod';
import { AdvancedOptions } from '../../services/EntityManager/types';
import { Configuration, PlaylistsApi as GeneratedPlaylistsApi, type DeletePlaylistRequest, type RepostPlaylistRequest, type UnrepostPlaylistRequest, type FavoritePlaylistRequest, type UnfavoritePlaylistRequest, type SharePlaylistRequest } from '../generated/default';
import { AddTrackToPlaylistRequest, CreatePlaylistSchema, EntityManagerDeletePlaylistRequest, PublishPlaylistRequest, RemoveTrackFromPlaylistRequest, EntityManagerRepostPlaylistRequest, EntityManagerUnrepostPlaylistRequest, EntityManagerFavoritePlaylistRequest, EntityManagerUnfavoritePlaylistRequest, EntityManagerSharePlaylistRequest, EntityManagerCreatePlaylistRequest, EntityManagerUpdatePlaylistRequest, type UpdatePlaylistRequestWithImage, type CreatePlaylistRequestWithFiles, type UploadPlaylistRequest, type PlaylistsApiServicesConfig } from './types';
export declare class PlaylistsApi extends GeneratedPlaylistsApi {
    private readonly storage;
    private readonly entityManager?;
    private readonly trackUploadHelper;
    private readonly tracksApi;
    constructor(configuration: Configuration, services: PlaylistsApiServicesConfig);
    /** @hidden
     * Create a playlist from existing tracks
     */
    createPlaylistWithEntityManager(params: EntityManagerCreatePlaylistRequest, advancedOptions?: AdvancedOptions): Promise<{
        playlistId: string | undefined;
        blockHash: string;
        blockNumber: number;
        transactionHash: string;
    }>;
    createPlaylist(params: CreatePlaylistRequestWithFiles, requestInit?: RequestInit): Promise<import("../generated/default").CreatePlaylistResponse>;
    /** @hidden
     * Upload a playlist
     * Uploads the specified tracks and combines them into a playlist
     */
    uploadPlaylist(params: UploadPlaylistRequest, requestInit?: RequestInit): Promise<import("../generated/default").CreatePlaylistResponse | {
        playlistId: string | null;
        blockHash: string;
        blockNumber: number;
        transactionHash: string;
    }>;
    /** @hidden
     * Publish a playlist
     * Changes a playlist from private to public
     */
    publishPlaylist(params: PublishPlaylistRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    /** @hidden
     * Add a single track to the end of a playlist
     * For more control use updatePlaylist
     */
    addTrackToPlaylist(params: AddTrackToPlaylistRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    /** @hidden
     * Removes a single track at the given index of playlist
     * For more control use updatePlaylist
     */
    removeTrackFromPlaylist(params: RemoveTrackFromPlaylistRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    /** @hidden
     * Update a playlist
     */
    updatePlaylistWithEntityManager(params: EntityManagerUpdatePlaylistRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    updatePlaylist(params: UpdatePlaylistRequestWithImage, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @hidden
     * Delete a playlist
     */
    deletePlaylistWithEntityManager(params: EntityManagerDeletePlaylistRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    deletePlaylist(params: DeletePlaylistRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @hidden
     * Favorite a playlist
     */
    favoritePlaylistWithEntityManager(params: EntityManagerFavoritePlaylistRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    favoritePlaylist(params: FavoritePlaylistRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @hidden
     * Unfavorite a playlist
     */
    unfavoritePlaylistWithEntityManager(params: EntityManagerUnfavoritePlaylistRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    unfavoritePlaylist(params: UnfavoritePlaylistRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @hidden
     * Repost a playlist
     */
    repostPlaylistWithEntityManager(params: EntityManagerRepostPlaylistRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    repostPlaylist(params: RepostPlaylistRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @hidden
     * Unrepost a playlist
     */
    unrepostPlaylistWithEntityManager(params: EntityManagerUnrepostPlaylistRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    unrepostPlaylist(params: UnrepostPlaylistRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @hidden
     * Share a playlist
     */
    sharePlaylistWithEntityManager(params: EntityManagerSharePlaylistRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    sharePlaylist(params: SharePlaylistRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @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 create a playlist from raw inputs, parsing them with CreatePlaylistSchema
     * This is used for both playlists and albums
     */
    createPlaylistInternal(params: z.input<typeof CreatePlaylistSchema>, advancedOptions?: AdvancedOptions): Promise<{
        playlistId: string | undefined;
        blockHash: string;
        blockNumber: number;
        transactionHash: string;
    }>;
    /**
     * Generates a new playlist ID
     *
     * @hidden
     */
    generatePlaylistId(): Promise<number>;
}
