import { Kysely } from 'kysely';
import { DB } from "../../database/database.type";
import { Logger } from 'pino-nestjs';
import { UsersService } from '../users/users.service';
import { BillingPlatform, SubscriptionStatus, VerifyPurchaseInput } from './billing.types';
type WebhookSource = 'apple' | 'google';
export declare class BillingService {
    private readonly db;
    private readonly logger;
    private readonly usersService;
    constructor(db: Kysely<DB>, logger: Logger, usersService: UsersService);
    grantSignupBonusPremium(options: {
        user_id: string;
        platform?: BillingPlatform;
    }): Promise<{
        granted: boolean;
        premiumUntil: Date | null;
        productId: string | null;
        months: number | null;
    }>;
    verifyPurchase(input: VerifyPurchaseInput): Promise<{
        status: boolean;
        statusCode: number;
        data: {
            active: boolean;
            creditPurchase: boolean;
            productId: string;
            transactionId: string;
            creditsAdded: any;
            duplicate: boolean;
            balance: any;
            status?: undefined;
            source?: undefined;
            diagnostics?: undefined;
            expiresAt?: undefined;
        };
    } | {
        status: boolean;
        statusCode: number;
        data: {
            active: boolean;
            status: SubscriptionStatus;
            source: string;
            diagnostics: {
                environment: any;
                subscriptionStatusCode: any;
                subscriptionStatusMeaning: string | null;
                transactionExpiresDateMs: any;
            } | null;
            expiresAt: Date | null;
            productId: string;
            transactionId: string;
            creditPurchase?: undefined;
            creditsAdded?: undefined;
            duplicate?: undefined;
            balance?: undefined;
        };
    } | {
        status: boolean;
        statusCode: number;
        data: {
            active: boolean;
            status: string;
            source: string;
            expiresAt: string;
            productId: string;
            transactionId: null;
            verificationSkipped: boolean;
            reason: string;
        };
    }>;
    getUserSubscription(userId: string): Promise<{
        status: boolean;
        statusCode: number;
        data: {
            created_at: Date;
            id: string;
            updated_at: Date;
            user_id: string;
            source: string;
            status: string;
            original_transaction_id: string | null;
            product_id: string | null;
            current_period_end: Date | null;
            current_period_start: Date | null;
            latest_transaction_id: string | null;
            plan: string;
        } | null;
    }>;
    getPurchaseHistory(userId: string): Promise<{
        status: boolean;
        statusCode: number;
        data: {
            created_at: Date;
            id: string;
            user_id: string | null;
            platform: string;
            original_transaction_id: string | null;
            product_id: string | null;
            store_payload: string | number | boolean | import("@/database/database.type").JsonArray | import("@/database/database.type").JsonObject | null;
            transaction_id: string | null;
            expires_at: Date | null;
            event_type: string;
        }[];
    }>;
    processWebhook(options: {
        source: WebhookSource;
        payload: Record<string, unknown>;
    }): Promise<{
        status: boolean;
        statusCode: number;
        data: {
            processed: boolean;
            duplicate: boolean;
            eventId?: undefined;
        };
    } | {
        status: boolean;
        statusCode: number;
        data: {
            processed: boolean;
            eventId: string;
            duplicate?: undefined;
        };
    } | {
        status: boolean;
        statusCode: number;
        data: {
            processed: boolean;
            reason: string;
        };
    }>;
    grantPremium(options: {
        user_id: string;
        days?: number;
        platform?: BillingPlatform;
        source: 'manual';
        eventType: 'manual_grant';
        metadata?: Record<string, unknown>;
    }): Promise<{
        status: boolean;
        statusCode: number;
        premiumUntil: Date;
    }>;
}
export {};
