import type { AuthenticatedUser } from '../../common/auth/authenticated-user';
import { CommunityService } from './community.service';
import { CreateAnnouncementDto, UpdateAnnouncementDto } from './dto/announcement.dto';
import { CreateChannelDto, UpdateChannelDto } from './dto/channel.dto';
import { CreateChatDto, CreateMessageDto } from './dto/chat.dto';
import { CreateCommentDto } from './dto/comment.dto';
import { CreatePostDto, UpdatePostDto } from './dto/post.dto';
import { RemovePushSubscriptionDto, SavePushSubscriptionDto } from './dto/push-subscription.dto';
export declare class CommunityController {
    private readonly community;
    constructor(community: CommunityService);
    bootstrap(user: AuthenticatedUser): Promise<{
        viewer: {
            id: string;
            email: string;
            displayName: string | null;
            role: "USER" | "ADMIN";
            canWrite: boolean;
            canManageSettings: boolean;
        };
        settings: Record<string, unknown>;
        channels: {
            id: string;
            name: string;
            icon: string | null;
            description: string | null;
            visibility: "MEMBERS" | "ADMINS";
            position: number;
            createdAt: Date;
            updatedAt: Date;
        }[];
        posts: import("./community.repository").PostSummary[];
        chats: {
            id: string;
            name: string;
            description: string | null;
            createdById: string | null;
            createdAt: Date;
        }[];
        announcements: {
            reads: number;
            id: string;
            status: "DRAFT" | "PUBLISHED";
            title: string;
            summary: string | null;
            body: string;
            cover: string | null;
            pinned: boolean;
            authorName: string | null;
            publishedAt: Date | null;
            createdAt: Date;
            readByMe: boolean;
        }[];
        memberCount: number;
    }>;
    pushConfiguration(): {
        enabled: boolean;
        publicKey: string | null;
    };
    savePushSubscription(user: AuthenticatedUser, input: SavePushSubscriptionDto): Promise<void>;
    removePushSubscription(user: AuthenticatedUser, input: RemovePushSubscriptionDto): Promise<void>;
    post(user: AuthenticatedUser, id: string): Promise<{
        views: number;
        comments: {
            id: string;
            authorId: string | null;
            authorName: string | null;
            accountName: string | null;
            body: string;
            createdAt: Date;
        }[];
        likes: number;
        likedByMe: boolean;
        id: string;
        legacyId: string | null;
        channelId: string;
        status: "DRAFT" | "PUBLISHED";
        variant: "FULL" | "SHORT";
        title: string;
        excerpt: string | null;
        body: string;
        cover: string | null;
        authorId: string | null;
        authorName: string | null;
        publishedAt: Date | null;
        legacyDate: string | null;
        sourcePath: string | null;
        sourceHash: string | null;
        createdAt: Date;
        updatedAt: Date;
    }>;
    createPost(user: AuthenticatedUser, input: CreatePostDto): Promise<{
        id: string;
        createdAt: Date;
        updatedAt: Date;
        legacyId: string | null;
        channelId: string;
        status: "DRAFT" | "PUBLISHED";
        variant: "FULL" | "SHORT";
        title: string;
        excerpt: string | null;
        body: string;
        cover: string | null;
        authorId: string | null;
        authorName: string | null;
        publishedAt: Date | null;
        legacyDate: string | null;
        sourcePath: string | null;
        sourceHash: string | null;
        views: number;
    }>;
    updatePost(user: AuthenticatedUser, id: string, input: UpdatePostDto): Promise<{
        id: string;
        legacyId: string | null;
        channelId: string;
        status: "DRAFT" | "PUBLISHED";
        variant: "FULL" | "SHORT";
        title: string;
        excerpt: string | null;
        body: string;
        cover: string | null;
        authorId: string | null;
        authorName: string | null;
        publishedAt: Date | null;
        legacyDate: string | null;
        sourcePath: string | null;
        sourceHash: string | null;
        views: number;
        createdAt: Date;
        updatedAt: Date;
    }>;
    deletePost(user: AuthenticatedUser, id: string): Promise<void>;
    like(user: AuthenticatedUser, id: string): Promise<{
        likes: number;
        likedByMe: boolean;
    }>;
    unlike(user: AuthenticatedUser, id: string): Promise<{
        likes: number;
        likedByMe: boolean;
    }>;
    addComment(user: AuthenticatedUser, id: string, input: CreateCommentDto): Promise<{
        id: string;
        createdAt: Date;
        legacyId: string | null;
        body: string;
        authorId: string | null;
        authorName: string | null;
        postId: string;
    }>;
    deleteComment(user: AuthenticatedUser, id: string): Promise<void>;
    messages(user: AuthenticatedUser, id: string): Promise<{
        id: string;
        authorId: string | null;
        authorName: string | null;
        accountName: string | null;
        body: string;
        createdAt: Date;
    }[]>;
    addMessage(user: AuthenticatedUser, id: string, input: CreateMessageDto): Promise<{
        id: string;
        createdAt: Date;
        legacyId: string | null;
        body: string;
        authorId: string | null;
        authorName: string | null;
        chatId: string;
    }>;
    createChat(user: AuthenticatedUser, input: CreateChatDto): Promise<{
        id: string;
        name: string;
        createdAt: Date;
        description: string | null;
        createdById: string | null;
    }>;
    createChannel(user: AuthenticatedUser, input: CreateChannelDto): Promise<{
        id: string;
        name: string;
        createdAt: Date;
        updatedAt: Date;
        description: string | null;
        icon: string | null;
        visibility: "MEMBERS" | "ADMINS";
        position: number;
    }>;
    updateChannel(user: AuthenticatedUser, id: string, input: UpdateChannelDto): Promise<{
        id: string;
        name: string;
        icon: string | null;
        description: string | null;
        visibility: "MEMBERS" | "ADMINS";
        position: number;
        createdAt: Date;
        updatedAt: Date;
    }>;
    deleteChannel(user: AuthenticatedUser, id: string): Promise<void>;
    createAnnouncement(user: AuthenticatedUser, input: CreateAnnouncementDto): Promise<{
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: "DRAFT" | "PUBLISHED";
        title: string;
        body: string;
        cover: string | null;
        authorId: string | null;
        authorName: string | null;
        publishedAt: Date | null;
        summary: string | null;
        pinned: boolean;
    }>;
    updateAnnouncement(user: AuthenticatedUser, id: string, input: UpdateAnnouncementDto): Promise<{
        id: string;
        status: "DRAFT" | "PUBLISHED";
        title: string;
        summary: string | null;
        body: string;
        cover: string | null;
        pinned: boolean;
        authorId: string | null;
        authorName: string | null;
        publishedAt: Date | null;
        createdAt: Date;
        updatedAt: Date;
    }>;
    deleteAnnouncement(user: AuthenticatedUser, id: string): Promise<void>;
    markAnnouncementRead(user: AuthenticatedUser, id: string): Promise<{
        readByMe: boolean;
    }>;
    updateSettings(user: AuthenticatedUser, input: Record<string, unknown>): Promise<Record<string, unknown>>;
}
