import { PrismaService } from '../../prisma/prisma.service';
import { CreditsService } from '../credits/credits.service';
import { TossPaymentsService } from '../payments/toss-payments.service';
import { ChangePlanDto } from './dto/change-plan.dto';
import { SubscribeAddonDto } from './dto/subscribe-addon.dto';
export declare class SubscriptionsService {
    private prisma;
    private creditsService;
    private tossPayments;
    private readonly logger;
    constructor(prisma: PrismaService, creditsService: CreditsService, tossPayments: TossPaymentsService);
    private ensureSubscription;
    getCurrent(userId: number): Promise<{
        id: number;
        plan: {
            name: string;
            id: number;
            isActive: boolean;
            createdAt: Date;
            planId: string;
            nameKo: string;
            price: number;
            creditBonus: number;
            totalCredits: number;
            features: import("@prisma/client/runtime/library").JsonValue | null;
            featuresEn: import("@prisma/client/runtime/library").JsonValue | null;
        };
        status: string;
        currentPeriodStart: Date | null;
        currentPeriodEnd: Date | null;
        cancelAtPeriodEnd: boolean;
        nextBillingDate: Date | null;
        billingAnchorDay: number;
        pendingPlan: {
            name: string;
            id: number;
            isActive: boolean;
            createdAt: Date;
            planId: string;
            nameKo: string;
            price: number;
            creditBonus: number;
            totalCredits: number;
            features: import("@prisma/client/runtime/library").JsonValue | null;
            featuresEn: import("@prisma/client/runtime/library").JsonValue | null;
        } | null;
        lastBillingStatus: string;
        addons: {
            id: number;
            addon: {
                name: string;
                id: number;
                isActive: boolean;
                createdAt: Date;
                nameKo: string;
                price: number;
                description: string | null;
                addonId: string;
                unit: string | null;
                unitKo: string | null;
                descriptionKo: string | null;
                perUnit: boolean;
            };
            quantity: number;
            isActive: boolean;
        }[];
    }>;
    getPlans(): Promise<{
        name: string;
        id: number;
        isActive: boolean;
        createdAt: Date;
        planId: string;
        nameKo: string;
        price: number;
        creditBonus: number;
        totalCredits: number;
        features: import("@prisma/client/runtime/library").JsonValue | null;
        featuresEn: import("@prisma/client/runtime/library").JsonValue | null;
    }[]>;
    private getNextBillingDate;
    changePlan(userId: number, dto: ChangePlanDto): Promise<{
        message: string;
        changeType: string;
        plan: {
            name: string;
            id: number;
            isActive: boolean;
            createdAt: Date;
            planId: string;
            nameKo: string;
            price: number;
            creditBonus: number;
            totalCredits: number;
            features: import("@prisma/client/runtime/library").JsonValue | null;
            featuresEn: import("@prisma/client/runtime/library").JsonValue | null;
        };
        pendingPlan: {
            name: string;
            id: number;
            isActive: boolean;
            createdAt: Date;
            planId: string;
            nameKo: string;
            price: number;
            creditBonus: number;
            totalCredits: number;
            features: import("@prisma/client/runtime/library").JsonValue | null;
            featuresEn: import("@prisma/client/runtime/library").JsonValue | null;
        } | null;
        id: number;
        createdAt: Date;
        updatedAt: Date;
        planId: number;
        userId: number;
        status: string;
        currentPeriodStart: Date | null;
        currentPeriodEnd: Date | null;
        cancelAtPeriodEnd: boolean;
        tossCustomerKey: string | null;
        tossBillingKey: string | null;
        billingAnchorDay: number;
        nextBillingDate: Date | null;
        lastBillingStatus: string;
        pendingPlanId: number | null;
    } | {
        message: string;
        changeType: string;
        chargedAmount: number;
        nextBillingDate: Date | null;
        plan: {
            name: string;
            id: number;
            isActive: boolean;
            createdAt: Date;
            planId: string;
            nameKo: string;
            price: number;
            creditBonus: number;
            totalCredits: number;
            features: import("@prisma/client/runtime/library").JsonValue | null;
            featuresEn: import("@prisma/client/runtime/library").JsonValue | null;
        };
        pendingPlan: {
            name: string;
            id: number;
            isActive: boolean;
            createdAt: Date;
            planId: string;
            nameKo: string;
            price: number;
            creditBonus: number;
            totalCredits: number;
            features: import("@prisma/client/runtime/library").JsonValue | null;
            featuresEn: import("@prisma/client/runtime/library").JsonValue | null;
        } | null;
        id: number;
        createdAt: Date;
        updatedAt: Date;
        planId: number;
        userId: number;
        status: string;
        currentPeriodStart: Date | null;
        currentPeriodEnd: Date | null;
        cancelAtPeriodEnd: boolean;
        tossCustomerKey: string | null;
        tossBillingKey: string | null;
        billingAnchorDay: number;
        lastBillingStatus: string;
        pendingPlanId: number | null;
    }>;
    private chargeUser;
    cancelSubscription(userId: number): Promise<{
        plan: {
            name: string;
            id: number;
            isActive: boolean;
            createdAt: Date;
            planId: string;
            nameKo: string;
            price: number;
            creditBonus: number;
            totalCredits: number;
            features: import("@prisma/client/runtime/library").JsonValue | null;
            featuresEn: import("@prisma/client/runtime/library").JsonValue | null;
        };
        pendingPlan: {
            name: string;
            id: number;
            isActive: boolean;
            createdAt: Date;
            planId: string;
            nameKo: string;
            price: number;
            creditBonus: number;
            totalCredits: number;
            features: import("@prisma/client/runtime/library").JsonValue | null;
            featuresEn: import("@prisma/client/runtime/library").JsonValue | null;
        } | null;
    } & {
        id: number;
        createdAt: Date;
        updatedAt: Date;
        planId: number;
        userId: number;
        status: string;
        currentPeriodStart: Date | null;
        currentPeriodEnd: Date | null;
        cancelAtPeriodEnd: boolean;
        tossCustomerKey: string | null;
        tossBillingKey: string | null;
        billingAnchorDay: number;
        nextBillingDate: Date | null;
        lastBillingStatus: string;
        pendingPlanId: number | null;
    }>;
    getAddons(): Promise<{
        name: string;
        id: number;
        isActive: boolean;
        createdAt: Date;
        nameKo: string;
        price: number;
        description: string | null;
        addonId: string;
        unit: string | null;
        unitKo: string | null;
        descriptionKo: string | null;
        perUnit: boolean;
    }[]>;
    subscribeAddon(userId: number, dto: SubscribeAddonDto): Promise<{
        addon: {
            name: string;
            id: number;
            isActive: boolean;
            createdAt: Date;
            nameKo: string;
            price: number;
            description: string | null;
            addonId: string;
            unit: string | null;
            unitKo: string | null;
            descriptionKo: string | null;
            perUnit: boolean;
        };
    } & {
        id: number;
        isActive: boolean;
        createdAt: Date;
        updatedAt: Date;
        userId: number;
        quantity: number;
        addonId: number;
    }>;
    updateAddonQuantity(userId: number, addonSubId: number, quantity: number): Promise<{
        addon: {
            name: string;
            id: number;
            isActive: boolean;
            createdAt: Date;
            nameKo: string;
            price: number;
            description: string | null;
            addonId: string;
            unit: string | null;
            unitKo: string | null;
            descriptionKo: string | null;
            perUnit: boolean;
        };
    } & {
        id: number;
        isActive: boolean;
        createdAt: Date;
        updatedAt: Date;
        userId: number;
        quantity: number;
        addonId: number;
    }>;
    unsubscribeAddon(userId: number, addonSubId: number): Promise<{
        addon: {
            name: string;
            id: number;
            isActive: boolean;
            createdAt: Date;
            nameKo: string;
            price: number;
            description: string | null;
            addonId: string;
            unit: string | null;
            unitKo: string | null;
            descriptionKo: string | null;
            perUnit: boolean;
        };
    } & {
        id: number;
        isActive: boolean;
        createdAt: Date;
        updatedAt: Date;
        userId: number;
        quantity: number;
        addonId: number;
    }>;
    getBillingHistory(userId: number): Promise<{
        id: number;
        createdAt: Date;
        userId: number;
        status: string;
        description: string | null;
        amount: number;
        type: string;
        referenceId: number | null;
        tossOrderId: string | null;
        tossPaymentKey: string | null;
        periodStart: Date | null;
        periodEnd: Date | null;
    }[]>;
}
