import { Model } from 'sequelize-typescript';
import { UserNotificationIncludes, UserNotificationModelForApi } from '../../types/models/user';
import { UserNotification, UserNotificationType } from '../../../shared/models';
import { AttributesOnly } from '../../../shared/typescript-utils';
import { AbuseModel } from '../abuse/abuse';
import { AccountModel } from '../account/account';
import { ActorFollowModel } from '../actor/actor-follow';
import { ApplicationModel } from '../application/application';
import { PluginModel } from '../server/plugin';
import { VideoModel } from '../video/video';
import { VideoBlacklistModel } from '../video/video-blacklist';
import { VideoCommentModel } from '../video/video-comment';
import { VideoImportModel } from '../video/video-import';
import { UserModel } from './user';
export declare class UserNotificationModel extends Model<Partial<AttributesOnly<UserNotificationModel>>> {
    type: UserNotificationType;
    read: boolean;
    createdAt: Date;
    updatedAt: Date;
    userId: number;
    User: UserModel;
    videoId: number;
    Video: VideoModel;
    commentId: number;
    VideoComment: VideoCommentModel;
    abuseId: number;
    Abuse: AbuseModel;
    videoBlacklistId: number;
    VideoBlacklist: VideoBlacklistModel;
    videoImportId: number;
    VideoImport: VideoImportModel;
    accountId: number;
    Account: AccountModel;
    actorFollowId: number;
    ActorFollow: ActorFollowModel;
    pluginId: number;
    Plugin: PluginModel;
    applicationId: number;
    Application: ApplicationModel;
    static listForApi(userId: number, start: number, count: number, sort: string, unread?: boolean): Promise<{
        total: number;
        data: UserNotificationModelForApi[];
    }>;
    static markAsRead(userId: number, notificationIds: number[]): Promise<[affectedCount: number]>;
    static markAllAsRead(userId: number): Promise<[affectedCount: number]>;
    static removeNotificationsOf(options: {
        id: number;
        type: 'account' | 'server';
        forUserId?: number;
    }): Promise<[unknown[], unknown]>;
    toFormattedJSON(this: UserNotificationModelForApi): UserNotification;
    formatVideo(video: UserNotificationIncludes.VideoInclude): {
        id: any;
        uuid: string;
        shortUUID: string;
        name: string;
    };
    formatAbuse(abuse: UserNotificationIncludes.AbuseInclude): {
        id: any;
        state: import("../../../shared/models").AbuseState;
        video: {
            id: any;
            uuid: string;
            shortUUID: string;
            name: string;
        };
        comment: {
            threadId: number;
            video: {
                id: any;
                name: string;
                shortUUID: string;
                uuid: string;
            };
        };
        account: {
            avatar: {
                path: string;
                width: number;
            };
            avatars: {
                path: string;
                width: number;
            }[];
            id: any;
            displayName: string;
            name: string;
            host: string;
        };
    };
    formatActor(accountOrChannel: UserNotificationIncludes.AccountIncludeActor | UserNotificationIncludes.VideoChannelIncludeActor): {
        avatar: {
            path: string;
            width: number;
        };
        avatars: {
            path: string;
            width: number;
        }[];
        id: any;
        displayName: string;
        name: string;
        host: string;
    };
    formatAvatars(avatars: UserNotificationIncludes.ActorImageInclude[]): {
        avatar: {
            path: string;
            width: number;
        };
        avatars: {
            path: string;
            width: number;
        }[];
    };
    formatAvatar(a: UserNotificationIncludes.ActorImageInclude): {
        path: string;
        width: number;
    };
}
//# sourceMappingURL=user-notification.d.ts.map