import { HttpStatus } from '@nestjs/common';
import { Kysely } from 'kysely';
import { DB } from "../../database/database.type";
export type CreditLedgerReason = 'breed_detection_debit' | 'ad_reward_credit' | 'credit_pack_purchase' | 'manual_adjustment' | 'reconciliation_adjustment';
export type CreditReferenceType = 'ai_detection' | 'ad_reward' | 'purchase' | 'system' | 'migration' | 'report_bonus';
export interface WalletMutationInput {
    user_id: string;
    delta: number;
    reason: CreditLedgerReason;
    referenceType: CreditReferenceType;
    idempotencyKey: string;
    referenceId?: string;
    metadata?: Record<string, unknown>;
    client?: Kysely<DB>;
}
export interface WalletBalance {
    basic_credits: number;
    additional_credits: number;
    total_credits: number;
}
export declare class WalletService {
    private readonly db;
    constructor(db: Kysely<DB>);
    private balanceFromRow;
    private normalizeHashInt;
    private readBalance;
    getUserWalletBalance(user_id: string, client?: Kysely<DB>): Promise<{
        status: boolean;
        statusCode: HttpStatus;
        data: WalletBalance;
    }>;
    applyCreditMutation(input: WalletMutationInput): Promise<{
        status: boolean;
        statusCode: HttpStatus;
        data: {
            duplicate: boolean;
            delta: number;
            balance_after: number;
            balance: WalletBalance;
        };
        message?: undefined;
    } | {
        status: boolean;
        statusCode: HttpStatus;
        message: string;
        data: {
            basic_credits: number;
            additional_credits: number;
            total_credits: number;
            required_credits: number;
            duplicate?: undefined;
            delta?: undefined;
            balance_after?: undefined;
            balance?: undefined;
        };
    } | {
        status: boolean;
        statusCode: HttpStatus;
        data: {
            duplicate: boolean;
            delta: number;
            balance: {
                basic_credits: number;
                additional_credits: number;
                total_credits: number;
            };
            balance_after?: undefined;
        };
        message?: undefined;
    }>;
    getCreditActivity(user_id: string, page?: number, limit?: number): Promise<{
        status: boolean;
        statusCode: HttpStatus;
        data: {
            activities: {
                reason: string;
                created_at: Date;
                id: string;
                delta: number;
                metadata: string | number | boolean | import("@/database/database.type").JsonArray | import("@/database/database.type").JsonObject | null;
                balance_after: number;
                reference_id: string | null;
                reference_type: string;
            }[];
            total: number;
            page: number;
            hasMore: boolean;
        };
    }>;
}
