/**
 * Servicio centralizado para la gestión de membresías y roles en organizaciones.
 * Incluye lógica para invitar, aceptar, listar, cambiar rol y eliminar miembros.
 */
import { PrismaClient, Prisma, Role, MembershipStatus } from "@prisma/client";
export declare class MembershipService {
    static createMembership(prisma: PrismaClient, userId: string, organizationId: string, role?: Role, status?: MembershipStatus): Promise<{
        organization: {
            settings: Prisma.JsonValue | null;
            id: string;
            createdAt: Date;
            updatedAt: Date;
            name: string;
            deletedAt: Date | null;
            trialDays: number;
            slug: string;
            subdomain: string | null;
            domain: string | null;
            isBlocked: boolean;
            trialEnd: Date | null;
            trialStart: Date | null;
            isTrialActive: boolean;
            paymentStatus: import("@prisma/client").$Enums.PaymentStatus;
        };
        user: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            name: string | null;
            email: string;
            password: string;
        };
    } & {
        role: import("@prisma/client").$Enums.Role;
        id: string;
        createdAt: Date;
        updatedAt: Date;
        organizationId: string;
        userId: string;
        status: import("@prisma/client").$Enums.MembershipStatus;
        deletedAt: Date | null;
        invitedBy: string | null;
        joinedAt: Date | null;
    }>;
    static updateMembership(prisma: PrismaClient, membershipId: string, data: Partial<Prisma.MembershipUpdateInput>): Promise<{
        organization: {
            settings: Prisma.JsonValue | null;
            id: string;
            createdAt: Date;
            updatedAt: Date;
            name: string;
            deletedAt: Date | null;
            trialDays: number;
            slug: string;
            subdomain: string | null;
            domain: string | null;
            isBlocked: boolean;
            trialEnd: Date | null;
            trialStart: Date | null;
            isTrialActive: boolean;
            paymentStatus: import("@prisma/client").$Enums.PaymentStatus;
        };
        user: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            name: string | null;
            email: string;
            password: string;
        };
    } & {
        role: import("@prisma/client").$Enums.Role;
        id: string;
        createdAt: Date;
        updatedAt: Date;
        organizationId: string;
        userId: string;
        status: import("@prisma/client").$Enums.MembershipStatus;
        deletedAt: Date | null;
        invitedBy: string | null;
        joinedAt: Date | null;
    }>;
    static deleteMembership(prisma: PrismaClient, membershipId: string, organizationId: string): Promise<{
        role: import("@prisma/client").$Enums.Role;
        id: string;
        createdAt: Date;
        updatedAt: Date;
        organizationId: string;
        userId: string;
        status: import("@prisma/client").$Enums.MembershipStatus;
        deletedAt: Date | null;
        invitedBy: string | null;
        joinedAt: Date | null;
    }>;
    static getMembership(prisma: PrismaClient, userId: string, organizationId: string): Promise<({
        organization: {
            settings: Prisma.JsonValue | null;
            id: string;
            createdAt: Date;
            updatedAt: Date;
            name: string;
            deletedAt: Date | null;
            trialDays: number;
            slug: string;
            subdomain: string | null;
            domain: string | null;
            isBlocked: boolean;
            trialEnd: Date | null;
            trialStart: Date | null;
            isTrialActive: boolean;
            paymentStatus: import("@prisma/client").$Enums.PaymentStatus;
        };
        user: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            name: string | null;
            email: string;
            password: string;
        };
    } & {
        role: import("@prisma/client").$Enums.Role;
        id: string;
        createdAt: Date;
        updatedAt: Date;
        organizationId: string;
        userId: string;
        status: import("@prisma/client").$Enums.MembershipStatus;
        deletedAt: Date | null;
        invitedBy: string | null;
        joinedAt: Date | null;
    }) | null>;
    static getOrganizationMembers(prisma: PrismaClient, organizationId: string): Promise<({
        user: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            name: string | null;
            email: string;
            password: string;
        };
    } & {
        role: import("@prisma/client").$Enums.Role;
        id: string;
        createdAt: Date;
        updatedAt: Date;
        organizationId: string;
        userId: string;
        status: import("@prisma/client").$Enums.MembershipStatus;
        deletedAt: Date | null;
        invitedBy: string | null;
        joinedAt: Date | null;
    })[]>;
    static inviteUser(prisma: PrismaClient, organizationId: string, email: string, role?: string): Promise<{
        organization: {
            settings: Prisma.JsonValue | null;
            id: string;
            createdAt: Date;
            updatedAt: Date;
            name: string;
            deletedAt: Date | null;
            trialDays: number;
            slug: string;
            subdomain: string | null;
            domain: string | null;
            isBlocked: boolean;
            trialEnd: Date | null;
            trialStart: Date | null;
            isTrialActive: boolean;
            paymentStatus: import("@prisma/client").$Enums.PaymentStatus;
        };
        user: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            name: string | null;
            email: string;
            password: string;
        };
    } & {
        role: import("@prisma/client").$Enums.Role;
        id: string;
        createdAt: Date;
        updatedAt: Date;
        organizationId: string;
        userId: string;
        status: import("@prisma/client").$Enums.MembershipStatus;
        deletedAt: Date | null;
        invitedBy: string | null;
        joinedAt: Date | null;
    }>;
}
//# sourceMappingURL=membershipService.d.ts.map