import { Transaction } from 'sequelize';
import { Model } from 'sequelize-typescript';
import { MUserAccountId } from '../../types/models';
import { MVideoPlaylistElement, MVideoPlaylistElementAP, MVideoPlaylistElementFormattable, MVideoPlaylistElementVideoUrlPlaylistPrivacy, MVideoPlaylistVideoThumbnail } from '../../types/models/video/video-playlist-element';
import { AttributesOnly } from '../../../shared/typescript-utils';
import { PlaylistElementObject } from '../../../shared/models/activitypub/objects/playlist-element-object';
import { VideoPlaylistElement, VideoPlaylistElementType } from '../../../shared/models/videos/playlist/video-playlist-element.model';
import { AccountModel } from '../account/account';
import { VideoModel } from './video';
import { VideoPlaylistModel } from './video-playlist';
export declare class VideoPlaylistElementModel extends Model<Partial<AttributesOnly<VideoPlaylistElementModel>>> {
    createdAt: Date;
    updatedAt: Date;
    url: string;
    position: number;
    startTimestamp: number;
    stopTimestamp: number;
    videoPlaylistId: number;
    VideoPlaylist: VideoPlaylistModel;
    videoId: number;
    Video: VideoModel;
    static deleteAllOf(videoPlaylistId: number, transaction?: Transaction): Promise<number>;
    static listForApi(options: {
        start: number;
        count: number;
        videoPlaylistId: number;
        serverAccount: AccountModel;
        user?: MUserAccountId;
    }): Promise<{
        total: number;
        data: VideoPlaylistElementModel[];
    }>;
    static loadByPlaylistAndVideo(videoPlaylistId: number, videoId: number): Promise<MVideoPlaylistElement>;
    static loadById(playlistElementId: number | string): Promise<MVideoPlaylistElement>;
    static loadByPlaylistAndElementIdForAP(playlistId: number | string, playlistElementId: number): Promise<MVideoPlaylistElementVideoUrlPlaylistPrivacy>;
    static listUrlsOfForAP(videoPlaylistId: number, start: number, count: number, t?: Transaction): Promise<{
        total: number;
        data: string[];
    }>;
    static loadFirstElementWithVideoThumbnail(videoPlaylistId: number): Promise<MVideoPlaylistVideoThumbnail>;
    static getNextPositionOf(videoPlaylistId: number, transaction?: Transaction): Promise<number>;
    static reassignPositionOf(options: {
        videoPlaylistId: number;
        firstPosition: number;
        endPosition: number;
        newPosition: number;
        transaction?: Transaction;
    }): Promise<[affectedCount: number]>;
    static increasePositionOf(videoPlaylistId: number, fromPosition: number, by?: number, transaction?: Transaction): Promise<[affectedRows: VideoPlaylistElementModel[], affectedCount?: number]>;
    getType(this: MVideoPlaylistElementFormattable, displayNSFW?: boolean, accountId?: number): VideoPlaylistElementType;
    getVideoElement(this: MVideoPlaylistElementFormattable, displayNSFW?: boolean, accountId?: number): import("../../../shared/models/videos/video.model").Video;
    toFormattedJSON(this: MVideoPlaylistElementFormattable, options?: {
        displayNSFW?: boolean;
        accountId?: number;
    }): VideoPlaylistElement;
    toActivityPubObject(this: MVideoPlaylistElementAP): PlaylistElementObject;
}
//# sourceMappingURL=video-playlist-element.d.ts.map