import { Model } from 'sequelize-typescript';
import { AbuseFilter, AbuseObject, AbusePredefinedReasons, AbusePredefinedReasonsString, AbuseState, AbuseVideoIs, AdminAbuse, UserAbuse, UserVideoAbuse } from '../../../shared/models';
import { AttributesOnly } from '../../../shared/typescript-utils';
import { MAbuseAdminFormattable, MAbuseAP, MAbuseFull, MAbuseReporter, MAbuseUserFormattable, MUserAccountId } from '../../types/models';
import { AccountModel } from '../account/account';
import { VideoAbuseModel } from './video-abuse';
import { VideoCommentAbuseModel } from './video-comment-abuse';
export declare enum ScopeNames {
    FOR_API = "FOR_API"
}
export declare class AbuseModel extends Model<Partial<AttributesOnly<AbuseModel>>> {
    reason: string;
    state: AbuseState;
    moderationComment: string;
    predefinedReasons: AbusePredefinedReasons[];
    createdAt: Date;
    updatedAt: Date;
    reporterAccountId: number;
    ReporterAccount: AccountModel;
    flaggedAccountId: number;
    FlaggedAccount: AccountModel;
    VideoCommentAbuse: VideoCommentAbuseModel;
    VideoAbuse: VideoAbuseModel;
    static loadByIdWithReporter(id: number): Promise<MAbuseReporter>;
    static loadFull(id: number): Promise<MAbuseFull>;
    static listForAdminApi(parameters: {
        start: number;
        count: number;
        sort: string;
        filter?: AbuseFilter;
        serverAccountId: number;
        user?: MUserAccountId;
        id?: number;
        predefinedReason?: AbusePredefinedReasonsString;
        state?: AbuseState;
        videoIs?: AbuseVideoIs;
        search?: string;
        searchReporter?: string;
        searchReportee?: string;
        searchVideo?: string;
        searchVideoChannel?: string;
    }): Promise<{
        total: number;
        data: AbuseModel[];
    }>;
    static listForUserApi(parameters: {
        user: MUserAccountId;
        start: number;
        count: number;
        sort: string;
        id?: number;
        search?: string;
        state?: AbuseState;
    }): Promise<{
        total: number;
        data: AbuseModel[];
    }>;
    buildBaseVideoCommentAbuse(this: MAbuseUserFormattable): {
        id: any;
        threadId: number;
        text: string;
        deleted: boolean;
        video: {
            id: any;
            name: string;
            uuid: string;
        };
    };
    buildBaseVideoAbuse(this: MAbuseUserFormattable): UserVideoAbuse;
    buildBaseAbuse(this: MAbuseUserFormattable, countMessages: number): UserAbuse;
    toFormattedAdminJSON(this: MAbuseAdminFormattable): AdminAbuse;
    toFormattedUserJSON(this: MAbuseUserFormattable): UserAbuse;
    toActivityPubObject(this: MAbuseAP): AbuseObject;
    private static internalCountForApi;
    private static internalListForApi;
    private static getStateLabel;
    private static getPredefinedReasonsStrings;
}
//# sourceMappingURL=abuse.d.ts.map