import { Action, EntityType } from '../services/dataContracts/EntityManagerClient';
import { GatedConditions, Nullable } from '../utils';
import { Base } from './base';
export declare type EntityManagerSuccessResponse = {
    blockHash: string;
    blockNumber: number;
    error: null;
};
export declare type EntityManagerErrorResponse = {
    blockHash: null;
    blockNumber: null;
    error: string;
};
export declare type EntityManagerResponse = EntityManagerSuccessResponse | EntityManagerErrorResponse;
declare type PlaylistTrack = {
    time: number;
    metadata_time?: number;
    track: number;
};
declare type PlaylistParam = {
    playlist_id: number;
    playlist_name: string;
    artwork?: {
        file?: File;
        url?: string;
    };
    playlist_contents: {
        track_ids: PlaylistTrack[];
    };
    cover_art_sizes: string;
    description: string;
    is_private: boolean;
    is_album: boolean;
    is_image_autogenerated: boolean;
    is_stream_gated: boolean;
    stream_conditions: Nullable<GatedConditions>;
    ddex_app?: string | null;
};
export declare class EntityManager extends Base {
    /**
     * Generate random integer between two known values
     */
    mapTimestamps(addedTimestamps: PlaylistTrack[]): {
        track: number;
        time: number;
    }[];
    getCurrentUserId(): number;
    getDefaultEntityManagerResponseValues(): EntityManagerResponse;
    /** Social Features */
    createSocialMethod: (entityType: EntityType, action: Action) => (entityId: number, metadata?: string) => Promise<EntityManagerResponse>;
    followUser: (entityId: number, metadata?: string) => Promise<EntityManagerResponse>;
    unfollowUser: (entityId: number, metadata?: string) => Promise<EntityManagerResponse>;
    saveTrack: (entityId: number, metadata?: string) => Promise<EntityManagerResponse>;
    unsaveTrack: (entityId: number, metadata?: string) => Promise<EntityManagerResponse>;
    savePlaylist: (entityId: number, metadata?: string) => Promise<EntityManagerResponse>;
    unsavePlaylist: (entityId: number, metadata?: string) => Promise<EntityManagerResponse>;
    repostTrack: (entityId: number, metadata?: string) => Promise<EntityManagerResponse>;
    unrepostTrack: (entityId: number, metadata?: string) => Promise<EntityManagerResponse>;
    repostPlaylist: (entityId: number, metadata?: string) => Promise<EntityManagerResponse>;
    unrepostPlaylist: (entityId: number, metadata?: string) => Promise<EntityManagerResponse>;
    /** Playlist */
    createPlaylist(playlist: PlaylistParam): Promise<EntityManagerResponse>;
    deletePlaylist(playlistId: number): Promise<EntityManagerResponse>;
    updatePlaylist(playlist: PlaylistParam): Promise<EntityManagerResponse>;
    /**
     * Manage an entity with the updated data contract flow
     * Leveraged to manipulate User/Track/Playlist/+ other entities
     */
    manageEntity({ userId, entityType, entityId, action, metadata }: {
        userId: number;
        entityType: EntityType;
        entityId: number;
        action: Action;
        metadata?: string;
    }): Promise<EntityManagerResponse>;
}
export {};
