import type Redis from "ioredis";
import { schema } from "@slackwsh/data";
import type { RequestUser } from "../auth/auth.guard";
import { WorkspacesService } from "./workspaces.service";
import { StatusService } from "./status.service";
export declare class WorkspacesController {
    private readonly workspaces;
    private readonly statuses;
    private readonly redis;
    constructor(workspaces: WorkspacesService, statuses: StatusService, redis: Redis);
    create(user: RequestUser, body: unknown): Promise<{
        id: number;
        name: string;
        createdAt: Date;
        orgId: number;
        slug: string;
        iconUrl: string | null;
        settings: unknown;
        retentionDays: number | null;
    }>;
    mine(user: RequestUser): Promise<{
        workspaces: {
            role: "owner" | "admin" | "member" | "multi_channel_guest" | "single_channel_guest" | "bot";
            id: number;
            name: string;
            createdAt: Date;
            orgId: number;
            slug: string;
            iconUrl: string | null;
            settings: unknown;
            retentionDays: number | null;
        }[];
    }>;
    adminOverview(user: RequestUser, workspaceId: string): Promise<{
        workspace: {
            id: number;
            name: string;
            createdAt: Date;
            orgId: number;
            slug: string;
            iconUrl: string | null;
            settings: unknown;
            retentionDays: number | null;
        } | undefined;
        members: {
            member: {
                workspaceId: number;
                userId: number;
                role: "owner" | "admin" | "member" | "multi_channel_guest" | "single_channel_guest" | "bot";
                displayName: string | null;
                title: string | null;
                statusText: string | null;
                statusEmoji: string | null;
                statusExpiresAt: Date | null;
                availabilityMode: string;
                dndEnabled: boolean;
                dndUntil: Date | null;
                autoStatusConnect: boolean;
                autoStatusFocus: boolean;
                autoStatusOutsideHours: boolean;
                focusModeEnabled: boolean;
                inConnect: boolean;
                workHoursStart: string;
                workHoursEnd: string;
                workingDays: unknown;
                joinedAt: Date;
                deactivatedAt: Date | null;
            };
            user: {
                id: number;
                name: string;
                createdAt: Date;
                email: string;
                emailVerifiedAt: Date | null;
                passwordHash: string;
                username: string;
                avatarUrl: string | null;
                tz: string;
                mfaSecret: string | null;
            };
        }[];
        invites: {
            id: number;
            createdAt: Date;
            email: string | null;
            workspaceId: number;
            role: "owner" | "admin" | "member" | "multi_channel_guest" | "single_channel_guest" | "bot";
            expiresAt: Date;
            invitedByUserId: number | null;
            tokenHash: string;
            usedAt: Date | null;
            maxUses: number;
            useCount: number;
        }[];
        channels: {
            id: number;
            name: string | null;
            createdAt: Date;
            workspaceId: number;
            type: "public" | "private" | "dm" | "group_dm";
            topic: string | null;
            purpose: string | null;
            createdBy: number;
            isArchived: boolean;
            lastMessageAt: Date | null;
            memberCount: number;
        }[];
    }>;
    members(user: RequestUser, workspaceId: string): Promise<{
        members: {
            member: {
                statusText: string | null;
                statusEmoji: string | null;
                statusExpiresAt: string | null;
                statusSource: "connect" | "manual" | "scheduled" | "focus" | "outside_hours" | null;
                dndActive: boolean;
                dndUntil: string | null;
                workspaceId: number;
                userId: number;
                role: "owner" | "admin" | "member" | "multi_channel_guest" | "single_channel_guest" | "bot";
                displayName: string | null;
                title: string | null;
                availabilityMode: string;
                dndEnabled: boolean;
                autoStatusConnect: boolean;
                autoStatusFocus: boolean;
                autoStatusOutsideHours: boolean;
                focusModeEnabled: boolean;
                inConnect: boolean;
                workHoursStart: string;
                workHoursEnd: string;
                workingDays: unknown;
                joinedAt: Date;
                deactivatedAt: Date | null;
            };
            user: typeof schema.users.$inferSelect;
        }[];
    }>;
    /** Same Redis hash the gateway writes — exposed here so /api/… proxies reach it. */
    presence(user: RequestUser, workspaceId: string): Promise<{
        presence: Record<string, {
            status: string;
            lastSeen: string;
        }>;
    }>;
    myStatus(user: RequestUser, workspaceId: string): Promise<{
        manual: {
            text: string | null;
            emoji: string | null;
            expiresAt: string | null;
            pauseNotifications: boolean;
        };
        effective: import("./status.service").EffectiveStatus;
        availabilityMode: string;
        automatic: {
            connect: boolean;
            focus: boolean;
            outsideWorkingHours: boolean;
            focusModeEnabled: boolean;
            inConnect: boolean;
            workHoursStart: string;
            workHoursEnd: string;
            workingDays: any[];
        };
        schedules: {
            id: number;
            text: string;
            emoji: string;
            startsAt: string;
            endsAt: string;
            pauseNotifications: boolean;
        }[];
    }>;
    setStatus(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        manual: {
            text: string | null;
            emoji: string | null;
            expiresAt: string | null;
            pauseNotifications: boolean;
        };
        effective: import("./status.service").EffectiveStatus;
        availabilityMode: string;
        automatic: {
            connect: boolean;
            focus: boolean;
            outsideWorkingHours: boolean;
            focusModeEnabled: boolean;
            inConnect: boolean;
            workHoursStart: string;
            workHoursEnd: string;
            workingDays: any[];
        };
        schedules: {
            id: number;
            text: string;
            emoji: string;
            startsAt: string;
            endsAt: string;
            pauseNotifications: boolean;
        }[];
    }>;
    setAvailability(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        manual: {
            text: string | null;
            emoji: string | null;
            expiresAt: string | null;
            pauseNotifications: boolean;
        };
        effective: import("./status.service").EffectiveStatus;
        availabilityMode: string;
        automatic: {
            connect: boolean;
            focus: boolean;
            outsideWorkingHours: boolean;
            focusModeEnabled: boolean;
            inConnect: boolean;
            workHoursStart: string;
            workHoursEnd: string;
            workingDays: any[];
        };
        schedules: {
            id: number;
            text: string;
            emoji: string;
            startsAt: string;
            endsAt: string;
            pauseNotifications: boolean;
        }[];
    }>;
    setStatusContext(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        manual: {
            text: string | null;
            emoji: string | null;
            expiresAt: string | null;
            pauseNotifications: boolean;
        };
        effective: import("./status.service").EffectiveStatus;
        availabilityMode: string;
        automatic: {
            connect: boolean;
            focus: boolean;
            outsideWorkingHours: boolean;
            focusModeEnabled: boolean;
            inConnect: boolean;
            workHoursStart: string;
            workHoursEnd: string;
            workingDays: any[];
        };
        schedules: {
            id: number;
            text: string;
            emoji: string;
            startsAt: string;
            endsAt: string;
            pauseNotifications: boolean;
        }[];
    }>;
    updateAutomaticStatus(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        manual: {
            text: string | null;
            emoji: string | null;
            expiresAt: string | null;
            pauseNotifications: boolean;
        };
        effective: import("./status.service").EffectiveStatus;
        availabilityMode: string;
        automatic: {
            connect: boolean;
            focus: boolean;
            outsideWorkingHours: boolean;
            focusModeEnabled: boolean;
            inConnect: boolean;
            workHoursStart: string;
            workHoursEnd: string;
            workingDays: any[];
        };
        schedules: {
            id: number;
            text: string;
            emoji: string;
            startsAt: string;
            endsAt: string;
            pauseNotifications: boolean;
        }[];
    }>;
    createScheduledStatus(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        manual: {
            text: string | null;
            emoji: string | null;
            expiresAt: string | null;
            pauseNotifications: boolean;
        };
        effective: import("./status.service").EffectiveStatus;
        availabilityMode: string;
        automatic: {
            connect: boolean;
            focus: boolean;
            outsideWorkingHours: boolean;
            focusModeEnabled: boolean;
            inConnect: boolean;
            workHoursStart: string;
            workHoursEnd: string;
            workingDays: any[];
        };
        schedules: {
            id: number;
            text: string;
            emoji: string;
            startsAt: string;
            endsAt: string;
            pauseNotifications: boolean;
        }[];
    }>;
    updateScheduledStatus(user: RequestUser, workspaceId: string, scheduleId: string, body: unknown): Promise<{
        manual: {
            text: string | null;
            emoji: string | null;
            expiresAt: string | null;
            pauseNotifications: boolean;
        };
        effective: import("./status.service").EffectiveStatus;
        availabilityMode: string;
        automatic: {
            connect: boolean;
            focus: boolean;
            outsideWorkingHours: boolean;
            focusModeEnabled: boolean;
            inConnect: boolean;
            workHoursStart: string;
            workHoursEnd: string;
            workingDays: any[];
        };
        schedules: {
            id: number;
            text: string;
            emoji: string;
            startsAt: string;
            endsAt: string;
            pauseNotifications: boolean;
        }[];
    }>;
    deleteScheduledStatus(user: RequestUser, workspaceId: string, scheduleId: string): Promise<{
        manual: {
            text: string | null;
            emoji: string | null;
            expiresAt: string | null;
            pauseNotifications: boolean;
        };
        effective: import("./status.service").EffectiveStatus;
        availabilityMode: string;
        automatic: {
            connect: boolean;
            focus: boolean;
            outsideWorkingHours: boolean;
            focusModeEnabled: boolean;
            inConnect: boolean;
            workHoursStart: string;
            workHoursEnd: string;
            workingDays: any[];
        };
        schedules: {
            id: number;
            text: string;
            emoji: string;
            startsAt: string;
            endsAt: string;
            pauseNotifications: boolean;
        }[];
    }>;
    createInvite(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        id: number;
        token: string | undefined;
        role: "owner" | "admin" | "member" | "multi_channel_guest" | "single_channel_guest" | "bot";
        expiresAt: Date;
        maxUses: number;
        userExists: boolean;
        notified: boolean;
    }>;
    pendingInvites(user: RequestUser): Promise<{
        invites: {
            id: number;
            workspaceId: number;
            workspaceName: string;
            workspaceSlug: string;
            role: "owner" | "admin" | "member" | "multi_channel_guest" | "single_channel_guest" | "bot";
            invitedByName: string | null;
            expiresAt: Date;
            createdAt: Date;
        }[];
    }>;
    acceptInvite(user: RequestUser, body: unknown): Promise<{
        id: number;
        name: string;
        createdAt: Date;
        orgId: number;
        slug: string;
        iconUrl: string | null;
        settings: unknown;
        retentionDays: number | null;
    } | undefined>;
    acceptInviteById(user: RequestUser, body: unknown): Promise<{
        id: number;
        name: string;
        createdAt: Date;
        orgId: number;
        slug: string;
        iconUrl: string | null;
        settings: unknown;
        retentionDays: number | null;
    } | undefined>;
    declineInvite(user: RequestUser, body: unknown): Promise<{
        declined: boolean;
    }>;
    notifications(user: RequestUser): Promise<{
        notifications: {
            id: number;
            createdAt: Date;
            userId: number;
            title: string;
            type: string;
            body: string;
            payload: unknown;
            readAt: Date | null;
        }[];
    }>;
    markNotificationRead(user: RequestUser, notificationId: string): Promise<{
        read: boolean;
    }>;
    changeRole(user: RequestUser, workspaceId: string, targetUserId: string, body: unknown): Promise<{
        updated: boolean;
    }>;
    deactivate(user: RequestUser, workspaceId: string, targetUserId: string): Promise<{
        deactivated: boolean;
    }>;
    reactivate(user: RequestUser, workspaceId: string, targetUserId: string): Promise<{
        reactivated: boolean;
    }>;
    transferOwnership(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        transferred: boolean;
    }>;
    updateSettings(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        updated: boolean;
    }>;
    private currentUserEmail;
}
//# sourceMappingURL=workspaces.controller.d.ts.map