import { AssemblyType, VoteChoice } from '@prisma/client';
import { PrismaService } from '../../prisma/prisma.service';
import { NotificationsService } from '../notifications/notifications.service';
import { AssembliesGateway } from './assemblies.gateway';
import { PdfService } from '../pdf/pdf.service';
import { AuthenticatedUser } from '../../common/decorators/current-user.decorator';
interface CreateAssemblyInput {
    complexId: string;
    type?: AssemblyType;
    title: string;
    scheduledAt: Date;
    location?: string;
    onlineUrl?: string;
    quorumPct?: number;
    agendaItems: {
        title: string;
        description?: string;
        requiresVote?: boolean;
        resolutionText?: string;
        majority?: string;
    }[];
}
export declare class AssembliesService {
    private readonly prisma;
    private readonly notifications;
    private readonly gateway;
    private readonly pdf;
    constructor(prisma: PrismaService, notifications: NotificationsService, gateway: AssembliesGateway, pdf: PdfService);
    create(user: AuthenticatedUser, dto: CreateAssemblyInput): Promise<({
        agendaItems: ({
            resolutions: {
                id: string;
                status: import(".prisma/client").$Enums.ResolutionStatus;
                closedAt: Date | null;
                text: string;
                agendaItemId: string;
                majority: string;
                totalFor: number;
                totalAgainst: number;
                totalAbstain: number;
            }[];
        } & {
            id: string;
            description: string | null;
            title: string;
            order: number;
            assemblyId: string;
            requiresVote: boolean;
        })[];
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: import(".prisma/client").$Enums.AssemblyStatus;
        complexId: string;
        type: import(".prisma/client").$Enums.AssemblyType;
        title: string;
        location: string | null;
        scheduledAt: Date;
        onlineUrl: string | null;
        quorumPct: import("@prisma/client/runtime/library").Decimal;
        minutesPdfUrl: string | null;
        correspondenceOpenAt: Date | null;
    }) | null>;
    list(user: AuthenticatedUser, complexId?: string): never[] | import(".prisma/client").Prisma.PrismaPromise<({
        _count: {
            convocations: number;
            agendaItems: number;
        };
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: import(".prisma/client").$Enums.AssemblyStatus;
        complexId: string;
        type: import(".prisma/client").$Enums.AssemblyType;
        title: string;
        location: string | null;
        scheduledAt: Date;
        onlineUrl: string | null;
        quorumPct: import("@prisma/client/runtime/library").Decimal;
        minutesPdfUrl: string | null;
        correspondenceOpenAt: Date | null;
    })[]>;
    findOne(user: AuthenticatedUser, id: string): Promise<{
        convocations: ({
            user: {
                id: string;
                email: string;
                firstName: string | null;
            };
        } & {
            id: string;
            userId: string;
            sentAt: Date | null;
            readAt: Date | null;
            pdfUrl: string | null;
            assemblyId: string;
            confirmedAt: Date | null;
        })[];
        complex: {
            id: string;
            name: string;
            createdAt: Date;
            updatedAt: Date;
            city: string | null;
            country: string;
            status: string;
            tenantId: string;
            type: import(".prisma/client").$Enums.ComplexType;
            address: string | null;
            gpsLat: number | null;
            gpsLng: number | null;
        };
        agendaItems: ({
            resolutions: ({
                _count: {
                    ballots: number;
                };
            } & {
                id: string;
                status: import(".prisma/client").$Enums.ResolutionStatus;
                closedAt: Date | null;
                text: string;
                agendaItemId: string;
                majority: string;
                totalFor: number;
                totalAgainst: number;
                totalAbstain: number;
            })[];
        } & {
            id: string;
            description: string | null;
            title: string;
            order: number;
            assemblyId: string;
            requiresVote: boolean;
        })[];
        proxies: {
            id: string;
            revokedAt: Date | null;
            assemblyId: string;
            giverId: string;
            receiverId: string;
            weight: number;
            signedAt: Date;
        }[];
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: import(".prisma/client").$Enums.AssemblyStatus;
        complexId: string;
        type: import(".prisma/client").$Enums.AssemblyType;
        title: string;
        location: string | null;
        scheduledAt: Date;
        onlineUrl: string | null;
        quorumPct: import("@prisma/client/runtime/library").Decimal;
        minutesPdfUrl: string | null;
        correspondenceOpenAt: Date | null;
    }>;
    sendConvocations(user: AuthenticatedUser, id: string): Promise<{
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: import(".prisma/client").$Enums.AssemblyStatus;
        complexId: string;
        type: import(".prisma/client").$Enums.AssemblyType;
        title: string;
        location: string | null;
        scheduledAt: Date;
        onlineUrl: string | null;
        quorumPct: import("@prisma/client/runtime/library").Decimal;
        minutesPdfUrl: string | null;
        correspondenceOpenAt: Date | null;
    }>;
    open(user: AuthenticatedUser, id: string): Promise<{
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: import(".prisma/client").$Enums.AssemblyStatus;
        complexId: string;
        type: import(".prisma/client").$Enums.AssemblyType;
        title: string;
        location: string | null;
        scheduledAt: Date;
        onlineUrl: string | null;
        quorumPct: import("@prisma/client/runtime/library").Decimal;
        minutesPdfUrl: string | null;
        correspondenceOpenAt: Date | null;
    }>;
    close(user: AuthenticatedUser, id: string): Promise<{
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: import(".prisma/client").$Enums.AssemblyStatus;
        complexId: string;
        type: import(".prisma/client").$Enums.AssemblyType;
        title: string;
        location: string | null;
        scheduledAt: Date;
        onlineUrl: string | null;
        quorumPct: import("@prisma/client/runtime/library").Decimal;
        minutesPdfUrl: string | null;
        correspondenceOpenAt: Date | null;
    }>;
    generatePvPdf(user: AuthenticatedUser, id: string): Promise<Buffer | null>;
    giveProxy(user: AuthenticatedUser, assemblyId: string, receiverId: string): Promise<{
        id: string;
        revokedAt: Date | null;
        assemblyId: string;
        giverId: string;
        receiverId: string;
        weight: number;
        signedAt: Date;
    }>;
    vote(user: AuthenticatedUser, resolutionId: string, choice: VoteChoice): Promise<{
        id: string;
        userId: string;
        weight: number;
        resolutionId: string;
        choice: import(".prisma/client").$Enums.VoteChoice;
        byCorrespondence: boolean;
        castAt: Date;
    }>;
    private tallyDelta;
    private computeVoteWeight;
    myWeight(user: AuthenticatedUser, assemblyId: string): Promise<{
        ownWeight: number;
        proxyWeight: number;
        totalWeight: number;
    }>;
}
export {};
