import { Request, Response, NextFunction } from "express";
import { PrismaClient } from "@prisma/client";
export interface AuthenticatedRequest extends Request {
    user?: {
        id: string;
        email: string;
        name?: string;
    };
    organization?: {
        id: string;
        name: string;
        slug: string;
        subdomain: string | null;
        domain: string | null;
        createdAt: Date;
        updatedAt: Date;
        deletedAt: Date | null;
        isBlocked: boolean;
        trialEnd?: Date;
        isTrialActive: boolean;
        paymentStatus: string;
    };
}
export interface PaymentAccessOptions {
    requireActivePayment?: boolean;
    requireTrialOrPayment?: boolean;
    allowedFeatures?: string[];
    checkUserLimits?: boolean;
    redirectToPayment?: boolean;
}
export declare class PaymentAccessMiddleware {
    private static instance;
    private prisma;
    private trialService;
    private productService;
    private constructor();
    static getInstance(prisma: PrismaClient): PaymentAccessMiddleware;
    /**
     * Middleware principal para controlar acceso basado en pagos
     */
    checkPaymentAccess(options?: PaymentAccessOptions): (req: AuthenticatedRequest, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
    /**
     * Middleware para verificar trial activo
     */
    checkTrialAccess(): (req: AuthenticatedRequest, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
    /**
     * Middleware para verificar suscripción activa
     */
    checkActiveSubscription(): (req: AuthenticatedRequest, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
    /**
     * Middleware para verificar características específicas
     */
    checkFeatureAccess(featureCode: string): (req: AuthenticatedRequest, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
    /**
     * Verifica si la organización tiene una suscripción activa
     */
    private hasActiveSubscription;
    /**
     * Verifica si la organización tiene acceso a las características especificadas
     */
    private checkFeatures;
    /**
     * Verifica los límites de usuarios
     */
    private checkUserLimits;
}
declare global {
    namespace Express {
        interface Request {
            trialStatus?: any;
        }
    }
}
//# sourceMappingURL=PaymentAccessMiddleware.d.ts.map