import { Transaction } from 'sequelize';
import { Model } from 'sequelize-typescript';
import { MAccountActor } from '../../types/models';
import { AttributesOnly } from '../../../shared/typescript-utils';
import { ActivityPubActor } from '../../../shared/models/activitypub';
import { VideoChannel, VideoChannelSummary } from '../../../shared/models/videos';
import { MChannel, MChannelActor, MChannelAP, MChannelBannerAccountDefault, MChannelFormattable, MChannelSummaryFormattable } from '../../types/models/video';
import { AccountModel } from '../account/account';
import { ActorModel } from '../actor/actor';
import { VideoModel } from './video';
import { VideoPlaylistModel } from './video-playlist';
export declare enum ScopeNames {
    FOR_API = "FOR_API",
    SUMMARY = "SUMMARY",
    WITH_ACCOUNT = "WITH_ACCOUNT",
    WITH_ACTOR = "WITH_ACTOR",
    WITH_ACTOR_BANNER = "WITH_ACTOR_BANNER",
    WITH_VIDEOS = "WITH_VIDEOS",
    WITH_STATS = "WITH_STATS"
}
declare type AvailableForListOptions = {
    actorId: number;
    search?: string;
    host?: string;
    handles?: string[];
    forCount?: boolean;
};
export declare type SummaryOptions = {
    actorRequired?: boolean;
    withAccount?: boolean;
    withAccountBlockerIds?: number[];
};
export declare class VideoChannelModel extends Model<Partial<AttributesOnly<VideoChannelModel>>> {
    name: string;
    description: string;
    support: string;
    createdAt: Date;
    updatedAt: Date;
    actorId: number;
    Actor: ActorModel;
    accountId: number;
    Account: AccountModel;
    Videos: VideoModel[];
    VideoPlaylists: VideoPlaylistModel[];
    static sendDeleteIfOwned(instance: VideoChannelModel, options: any): Promise<any>;
    static countByAccount(accountId: number): Promise<number>;
    static getStats(): Promise<{
        totalLocalVideoChannels: number;
        totalLocalDailyActiveVideoChannels: number;
        totalLocalWeeklyActiveVideoChannels: number;
        totalLocalMonthlyActiveVideoChannels: number;
        totalLocalHalfYearActiveVideoChannels: number;
    }>;
    static listLocalsForSitemap(sort: string): Promise<MChannelActor[]>;
    static listForApi(parameters: Pick<AvailableForListOptions, 'actorId'> & {
        start: number;
        count: number;
        sort: string;
    }): Promise<{
        total: number;
        data: VideoChannelModel[];
    }>;
    static searchForApi(options: Pick<AvailableForListOptions, 'actorId' | 'search' | 'host' | 'handles'> & {
        start: number;
        count: number;
        sort: string;
    }): Promise<{
        total: number;
        data: VideoChannelModel[];
    }>;
    static listByAccountForAPI(options: {
        accountId: number;
        start: number;
        count: number;
        sort: string;
        withStats?: boolean;
        search?: string;
    }): Promise<{
        total: number;
        data: VideoChannelModel[];
    }>;
    static listAllByAccount(accountId: number): Promise<MChannel[]>;
    static loadAndPopulateAccount(id: number, transaction?: Transaction): Promise<MChannelBannerAccountDefault>;
    static loadByUrlAndPopulateAccount(url: string): Promise<MChannelBannerAccountDefault>;
    static loadByNameWithHostAndPopulateAccount(nameWithHost: string): Promise<MChannelBannerAccountDefault>;
    static loadLocalByNameAndPopulateAccount(name: string): Promise<MChannelBannerAccountDefault>;
    static loadByNameAndHostAndPopulateAccount(name: string, host: string): Promise<MChannelBannerAccountDefault>;
    toFormattedSummaryJSON(this: MChannelSummaryFormattable): VideoChannelSummary;
    toFormattedJSON(this: MChannelFormattable): VideoChannel;
    toActivityPubObject(this: MChannelAP): ActivityPubActor;
    getLocalUrl(this: MAccountActor | MChannelActor): string;
    getDisplayName(): string;
    isOutdated(): boolean;
    setAsUpdated(transaction?: Transaction): Promise<[undefined, number]>;
}
export {};
//# sourceMappingURL=video-channel.d.ts.map