import { PlanTier } from '@prisma/client';
import { BillingService } from './billing.service';
import { AuthenticatedUser } from '../../common/decorators/current-user.decorator';
declare class UpsertPlanDto {
    code: string;
    name: string;
    tier?: PlanTier;
    fixedPrice: number;
    pricePerLot: number;
    currency?: string;
    features?: Record<string, boolean>;
}
declare class ToggleFeatureDto {
    featureKey: string;
    enabled: boolean;
}
declare class SubscribeDto {
    tenantId: string;
    planCode: string;
}
declare class GenerateInvoiceDto {
    periodStart: string;
    periodEnd: string;
}
export declare class BillingController {
    private readonly service;
    constructor(service: BillingService);
    upsertPlan(u: AuthenticatedUser, dto: UpsertPlanDto): Promise<{
        id: string;
        code: string;
        name: string;
        tier: import(".prisma/client").$Enums.PlanTier;
        fixedPrice: import("@prisma/client/runtime/library").Decimal;
        pricePerLot: import("@prisma/client/runtime/library").Decimal;
        currency: string;
        features: import("@prisma/client/runtime/library").JsonValue;
        isActive: boolean;
        createdAt: Date;
        updatedAt: Date;
    }>;
    listPlans(u: AuthenticatedUser): import(".prisma/client").Prisma.PrismaPromise<{
        id: string;
        code: string;
        name: string;
        tier: import(".prisma/client").$Enums.PlanTier;
        fixedPrice: import("@prisma/client/runtime/library").Decimal;
        pricePerLot: import("@prisma/client/runtime/library").Decimal;
        currency: string;
        features: import("@prisma/client/runtime/library").JsonValue;
        isActive: boolean;
        createdAt: Date;
        updatedAt: Date;
    }[]>;
    toggle(u: AuthenticatedUser, tenantId: string, dto: ToggleFeatureDto): Promise<{
        id: string;
        tenantId: string;
        featureKey: string;
        enabled: boolean;
        activatedAt: Date | null;
    }>;
    listFeatures(u: AuthenticatedUser, tenantId: string): import(".prisma/client").Prisma.PrismaPromise<{
        id: string;
        tenantId: string;
        featureKey: string;
        enabled: boolean;
        activatedAt: Date | null;
    }[]>;
    subscribe(u: AuthenticatedUser, dto: SubscribeDto): Promise<{
        id: string;
        fixedPrice: import("@prisma/client/runtime/library").Decimal;
        pricePerLot: import("@prisma/client/runtime/library").Decimal;
        currency: string;
        createdAt: Date;
        status: string;
        tenantId: string;
        lotsCount: number;
        planCode: string;
        startedAt: Date;
        endedAt: Date | null;
    }>;
    generate(u: AuthenticatedUser, tenantId: string, dto: GenerateInvoiceDto): Promise<{
        id: string;
        currency: string;
        createdAt: Date;
        status: string;
        tenantId: string;
        dueDate: Date;
        amount: import("@prisma/client/runtime/library").Decimal;
        periodStart: Date;
        periodEnd: Date;
        lotsCount: number;
        pdfUrl: string | null;
        paidAt: Date | null;
    }>;
    list(u: AuthenticatedUser, tenantId?: string): never[] | import(".prisma/client").Prisma.PrismaPromise<{
        id: string;
        currency: string;
        createdAt: Date;
        status: string;
        tenantId: string;
        dueDate: Date;
        amount: import("@prisma/client/runtime/library").Decimal;
        periodStart: Date;
        periodEnd: Date;
        lotsCount: number;
        pdfUrl: string | null;
        paidAt: Date | null;
    }[]>;
    markPaid(u: AuthenticatedUser, id: string): Promise<{
        id: string;
        currency: string;
        createdAt: Date;
        status: string;
        tenantId: string;
        dueDate: Date;
        amount: import("@prisma/client/runtime/library").Decimal;
        periodStart: Date;
        periodEnd: Date;
        lotsCount: number;
        pdfUrl: string | null;
        paidAt: Date | null;
    }>;
}
export {};
