import { Transaction } from 'sequelize';
import { Model } from 'sequelize-typescript';
import { MAccountId, MChannelId } from '../../types/models';
import { AttributesOnly } from '../../../shared/typescript-utils';
import { PlaylistObject } from '../../../shared/models/activitypub/objects/playlist-object';
import { VideoPlaylistPrivacy } from '../../../shared/models/videos/playlist/video-playlist-privacy.model';
import { VideoPlaylistType } from '../../../shared/models/videos/playlist/video-playlist-type.model';
import { VideoPlaylist } from '../../../shared/models/videos/playlist/video-playlist.model';
import { MThumbnail } from '../../types/models/video/thumbnail';
import { MVideoPlaylistAccountThumbnail, MVideoPlaylistAP, MVideoPlaylistFormattable, MVideoPlaylistFull, MVideoPlaylistFullSummary, MVideoPlaylistIdWithElements } from '../../types/models/video/video-playlist';
import { AccountModel } from '../account/account';
import { ThumbnailModel } from './thumbnail';
import { VideoChannelModel } from './video-channel';
import { VideoPlaylistElementModel } from './video-playlist-element';
declare type AvailableForListOptions = {
    followerActorId?: number;
    type?: VideoPlaylistType;
    accountId?: number;
    videoChannelId?: number;
    listMyPlaylists?: boolean;
    search?: string;
    host?: string;
    uuids?: string[];
    withVideos?: boolean;
};
export declare class VideoPlaylistModel extends Model<Partial<AttributesOnly<VideoPlaylistModel>>> {
    createdAt: Date;
    updatedAt: Date;
    name: string;
    description: string;
    privacy: VideoPlaylistPrivacy;
    url: string;
    uuid: string;
    type: VideoPlaylistType;
    ownerAccountId: number;
    OwnerAccount: AccountModel;
    videoChannelId: number;
    VideoChannel: VideoChannelModel;
    VideoPlaylistElements: VideoPlaylistElementModel[];
    Thumbnail: ThumbnailModel;
    static listForApi(options: AvailableForListOptions & {
        start: number;
        count: number;
        sort: string;
    }): Promise<{
        total: number;
        data: VideoPlaylistModel[];
    }>;
    static searchForApi(options: Pick<AvailableForListOptions, 'followerActorId' | 'search' | 'host' | 'uuids'> & {
        start: number;
        count: number;
        sort: string;
    }): Promise<{
        total: number;
        data: VideoPlaylistModel[];
    }>;
    static listPublicUrlsOfForAP(options: {
        account?: MAccountId;
        channel?: MChannelId;
    }, start: number, count: number): Promise<{
        total: number;
        data: string[];
    }>;
    static listPlaylistIdsOf(accountId: number, videoIds: number[]): Promise<MVideoPlaylistIdWithElements[]>;
    static doesPlaylistExist(url: string): Promise<boolean>;
    static loadWithAccountAndChannelSummary(id: number | string, transaction: Transaction): Promise<MVideoPlaylistFullSummary>;
    static loadWithAccountAndChannel(id: number | string, transaction: Transaction): Promise<MVideoPlaylistFull>;
    static loadByUrlAndPopulateAccount(url: string): Promise<MVideoPlaylistAccountThumbnail>;
    static loadByUrlWithAccountAndChannelSummary(url: string): Promise<MVideoPlaylistFullSummary>;
    static getPrivacyLabel(privacy: VideoPlaylistPrivacy): string;
    static getTypeLabel(type: VideoPlaylistType): string;
    static resetPlaylistsOfChannel(videoChannelId: number, transaction: Transaction): Promise<[number, VideoPlaylistModel[]]>;
    setAndSaveThumbnail(thumbnail: MThumbnail, t: Transaction): Promise<void>;
    hasThumbnail(): boolean;
    hasGeneratedThumbnail(): boolean;
    generateThumbnailName(): string;
    getThumbnailUrl(): string;
    getThumbnailStaticPath(): string;
    getWatchStaticPath(): string;
    getEmbedStaticPath(): string;
    static getStats(): Promise<{
        totalLocalPlaylists: number;
    }>;
    setAsRefreshed(): Promise<[undefined, number]>;
    setVideosLength(videosLength: number): void;
    isOwned(): boolean;
    isOutdated(): boolean;
    toFormattedJSON(this: MVideoPlaylistFormattable): VideoPlaylist;
    toActivityPubObject(this: MVideoPlaylistAP, page: number, t: Transaction): Promise<PlaylistObject>;
}
export {};
//# sourceMappingURL=video-playlist.d.ts.map