import { PrismaClient, PlanType, BillingInterval } from "@prisma/client";
export interface CreatePlanRequest {
    name: string;
    description: string;
    price: number;
    type: PlanType;
    interval: BillingInterval;
    trialDays: number;
    maxUsers?: number;
    maxProjects?: number;
    features?: any;
    isActive?: boolean;
}
export interface UpdatePlanRequest {
    name?: string;
    description?: string;
    price?: number;
    type?: PlanType;
    interval?: BillingInterval;
    trialDays?: number;
    maxUsers?: number;
    maxProjects?: number;
    features?: any;
    isActive?: boolean;
}
export interface PlanWithFeatures {
    id: string;
    name: string;
    description: string;
    price: number;
    type: PlanType;
    interval: BillingInterval;
    trialDays: number;
    maxUsers?: number;
    maxProjects?: number;
    features?: any;
    isActive: boolean;
    createdAt: Date;
    updatedAt: Date;
    planFeatures: any[];
}
export interface FeatureRequest {
    name: string;
    description: string;
    code: string;
    isActive?: boolean;
}
export declare class ProductService {
    private static instance;
    private prisma;
    private constructor();
    static getInstance(prisma: PrismaClient): ProductService;
    /**
     * Crea un nuevo plan
     */
    createPlan(request: CreatePlanRequest): Promise<PlanWithFeatures>;
    /**
     * Actualiza un plan existente
     */
    updatePlan(planId: string, request: UpdatePlanRequest): Promise<PlanWithFeatures>;
    /**
     * Obtiene un plan por ID
     */
    getPlan(planId: string): Promise<PlanWithFeatures | null>;
    /**
     * Lista todos los planes activos
     */
    listActivePlans(): Promise<PlanWithFeatures[]>;
    /**
     * Lista todos los planes (activos e inactivos)
     */
    listAllPlans(): Promise<PlanWithFeatures[]>;
    /**
     * Elimina un plan (soft delete)
     */
    deletePlan(planId: string): Promise<void>;
    /**
     * Crea una nueva característica
     */
    createFeature(request: FeatureRequest): Promise<any>;
    /**
     * Asigna características a un plan
     */
    assignFeaturesToPlan(planId: string, featureIds: string[]): Promise<void>;
    /**
     * Obtiene las características de un plan
     */
    getPlanFeatures(planId: string): Promise<any[]>;
    /**
     * Lista todas las características activas
     */
    listActiveFeatures(): Promise<any[]>;
    /**
     * Obtiene estadísticas de planes
     */
    getPlanStats(): Promise<any>;
    /**
     * Verifica si un plan tiene una característica específica
     */
    planHasFeature(planId: string, featureCode: string): Promise<boolean>;
    /**
     * Obtiene el plan gratuito por defecto
     */
    getFreePlan(): Promise<PlanWithFeatures | null>;
    /**
     * Valida la solicitud de creación de plan
     */
    private validateCreatePlanRequest;
    /**
     * Valida la solicitud de actualización de plan
     */
    private validateUpdatePlanRequest;
    /**
     * Valida la solicitud de característica
     */
    private validateFeatureRequest;
}
//# sourceMappingURL=ProductService.d.ts.map