import { Transaction } from 'sequelize';
import { Model } from 'sequelize-typescript';
import { MAccount, MAccountId, MUserAccountId } from '../../types/models';
import { AttributesOnly } from '../../../shared/typescript-utils';
import { ActivityTombstoneObject } from '../../../shared/models/activitypub/objects/common-objects';
import { VideoCommentObject } from '../../../shared/models/activitypub/objects/video-comment-object';
import { VideoComment, VideoCommentAdmin } from '../../../shared/models/videos/comment/video-comment.model';
import { MComment, MCommentAdminFormattable, MCommentAP, MCommentFormattable, MCommentId, MCommentOwner, MCommentOwnerReplyVideoLight, MCommentOwnerVideo, MCommentOwnerVideoFeed, MCommentOwnerVideoReply, MVideoImmutable } from '../../types/models/video';
import { VideoCommentAbuseModel } from '../abuse/video-comment-abuse';
import { AccountModel } from '../account/account';
import { VideoModel } from './video';
export declare enum ScopeNames {
    WITH_ACCOUNT = "WITH_ACCOUNT",
    WITH_ACCOUNT_FOR_API = "WITH_ACCOUNT_FOR_API",
    WITH_IN_REPLY_TO = "WITH_IN_REPLY_TO",
    WITH_VIDEO = "WITH_VIDEO",
    ATTRIBUTES_FOR_API = "ATTRIBUTES_FOR_API"
}
export declare class VideoCommentModel extends Model<Partial<AttributesOnly<VideoCommentModel>>> {
    createdAt: Date;
    updatedAt: Date;
    deletedAt: Date;
    url: string;
    text: string;
    originCommentId: number;
    OriginVideoComment: VideoCommentModel;
    inReplyToCommentId: number;
    InReplyToVideoComment: VideoCommentModel | null;
    videoId: number;
    Video: VideoModel;
    accountId: number;
    Account: AccountModel;
    CommentAbuses: VideoCommentAbuseModel[];
    static loadById(id: number, t?: Transaction): Promise<MComment>;
    static loadByIdAndPopulateVideoAndAccountAndReply(id: number, t?: Transaction): Promise<MCommentOwnerVideoReply>;
    static loadByUrlAndPopulateAccountAndVideo(url: string, t?: Transaction): Promise<MCommentOwnerVideo>;
    static loadByUrlAndPopulateReplyAndVideoUrlAndAccount(url: string, t?: Transaction): Promise<MCommentOwnerReplyVideoLight>;
    static listCommentsForApi(parameters: {
        start: number;
        count: number;
        sort: string;
        isLocal?: boolean;
        search?: string;
        searchAccount?: string;
        searchVideo?: string;
    }): Promise<{
        total: number;
        data: VideoCommentModel[];
    }>;
    static listThreadsForApi(parameters: {
        videoId: number;
        isVideoOwned: boolean;
        start: number;
        count: number;
        sort: string;
        user?: MUserAccountId;
    }): Promise<{
        total: number;
        data: VideoCommentModel[];
        totalNotDeletedComments: number;
    }>;
    static listThreadCommentsForApi(parameters: {
        videoId: number;
        isVideoOwned: boolean;
        threadId: number;
        user?: MUserAccountId;
    }): Promise<{
        total: number;
        data: VideoCommentModel[];
    }>;
    static listThreadParentComments(comment: MCommentId, t: Transaction, order?: 'ASC' | 'DESC'): Promise<MCommentOwner[]>;
    static listAndCountByVideoForAP(video: MVideoImmutable, start: number, count: number, t?: Transaction): Promise<{
        rows: MComment[];
        count: number;
    }>;
    static listForFeed(parameters: {
        start: number;
        count: number;
        videoId?: number;
        accountId?: number;
        videoChannelId?: number;
    }): Promise<MCommentOwnerVideoFeed[]>;
    static listForBulkDelete(ofAccount: MAccount, filter?: {
        onVideosOfAccount?: MAccountId;
    }): Promise<VideoCommentModel[]>;
    static getStats(): Promise<{
        totalLocalVideoComments: number;
        totalVideoComments: number;
    }>;
    static listRemoteCommentUrlsOfLocalVideos(): Promise<string[]>;
    static cleanOldCommentsOf(videoId: number, beforeUpdatedAt: Date): Promise<number>;
    getCommentStaticPath(): string;
    getThreadId(): number;
    isOwned(): boolean;
    markAsDeleted(): void;
    isDeleted(): boolean;
    extractMentions(): string[];
    toFormattedJSON(this: MCommentFormattable): VideoComment;
    toFormattedAdminJSON(this: MCommentAdminFormattable): VideoCommentAdmin;
    toActivityPubObject(this: MCommentAP, threadParentComments: MCommentOwner[]): VideoCommentObject | ActivityTombstoneObject;
    private static buildBlockerAccountIds;
}
//# sourceMappingURL=video-comment.d.ts.map