import { Module, PisellCore, ModuleOptions } from '../../types';
import { RequestPlugin, WindowPlugin } from '../../plugins';
import { BaseModule } from '../BaseModule';
import { PaymentModuleAPI, PaymentMethod, PaymentOrder, PaymentItem, PaymentItemInput, PaymentUpdateFields, PushOrderParams, CashPayment, EftposPayment, WalletPassPayment, RoundingRule, RoundingInterval, RoundingResult } from './types';
export * from './types';
export { generateRequestUniqueId };
/**
 * 生成请求唯一ID
 * 格式: 年月日时分秒毫秒+4位随机数
 * 示例: 20241201143025123456
 */
declare function generateRequestUniqueId(): string;
/**
 * 支付模块实现
 *
 * 负责处理支付相关的数据管理和本地存储
 */
export declare class PaymentModule extends BaseModule implements Module, PaymentModuleAPI {
    protected defaultName: string;
    protected defaultVersion: string;
    request: RequestPlugin;
    private app;
    private store;
    window: WindowPlugin;
    private dbManager;
    private logger;
    private voucherUpdateLockByOrderUuid;
    private payMethodMemoryCache;
    private payMethodListInFlight;
    private isRefreshingPaymentMethods;
    protected otherParams: any;
    cash: CashPayment;
    eftpos: EftposPayment;
    wallet: WalletPassPayment;
    constructor(name?: string, version?: string);
    private runVoucherUpdateLocked;
    private normalizeVoucherPaymentItems;
    initialize(core: PisellCore, options: ModuleOptions): Promise<void>;
    /**
     * 记录信息日志
     */
    logInfo(title: string, metadata?: any): void;
    /**
     * 记录警告日志
     */
    logWarning(title: string, metadata?: any): void;
    /**
     * 记录错误日志
     */
    logError(title: string, error?: any, metadata?: any): void;
    /**
     * 记录调试日志
     */
    logDebug(title: string, metadata?: any): void;
    /**
     * 网络恢复以后，尝试执行队列
     *
     */
    private registerNetworkHandlers;
    private filterPayMethods;
    /**
     * 获取支付方式列表
     */
    getPayMethodListAsync(): Promise<PaymentMethod[]>;
    private loadPayMethodListAsync;
    /**
     * 后台刷新支付方式列表
     */
    private refreshPaymentMethodsInBackground;
    /**
     * 检查支付方式列表是否有变化
     */
    private hasPaymentMethodsChanged;
    /**
     * 获取订单列表
     */
    getOrderListAsync(): Promise<PaymentOrder[]>;
    /**
     * 根据订单UUID获取支付订单（新方法）
     */
    getPaymentOrderByUuidAsync(orderUuid: string): Promise<PaymentOrder | null>;
    /**
     * 创建支付订单（新方法，专注支付数据）
     */
    createPaymentOrderAsync(params: PushOrderParams): Promise<PaymentOrder>;
    /**
     * 删除支付订单（新方法）
     */
    deletePaymentOrderAsync(orderUuid: string): Promise<void>;
    /**
     * 更新订单
     */
    updateOrderAsync(orderUuid: string, params: Partial<PaymentOrder>): Promise<void>;
    /**
     * 基于UUID替换订单ID
     *
     * 此方法用于将本地虚拟订单ID替换为真实的订单ID。
     * 当前端模拟下单流程完成后，后端返回真实订单ID时调用此方法。
     *
     * @param orderUuid 订单的UUID
     * @param newOrderId 新的订单ID (来自后端)
     * @returns 更新后的订单对象，如果订单不存在则返回null
     */
    replaceOrderIdByUuidAsync(orderUuid: string, newOrderId: string): Promise<PaymentOrder | null>;
    /**
     * 获取支付项（新方法）
     *
     * @param orderUuid 订单UUID
     * @param includeVoided 是否包含已撤销的支付项，默认为false
     * @returns 支付项数组
     */
    getPaymentItemsAsync(orderUuid: string, includeVoided?: boolean): Promise<PaymentItem[]>;
    /**
     * 获取所有支付项（包括已撤销的）
     *
     * @param orderUuid 订单UUID
     * @returns 所有支付项数组（包括撤销的）
     */
    getAllPaymentItemsAsync(orderUuid: string): Promise<PaymentItem[]>;
    /**
     * 为某个订单添加支付项（新方法）
     */
    addPaymentItemAsync(orderUuid: string, paymentItem: PaymentItemInput): Promise<void>;
    /**
     * 删除一个支付项 - 标记删除而非物理删除
     */
    deletePaymentAsync(orderUuid: string, paymentUuid: string): Promise<void>;
    /**
     * 批量更新代金券类支付项（覆盖更新）
     *
     * 删除所有现有的带 voucher_id 的支付项，然后添加新的代金券支付项
     * 这是一个覆盖式更新，确保代金券支付项的一致性
     */
    updateVoucherPaymentItemsAsync(orderUuid: string, voucherPaymentItems: PaymentItemInput[]): Promise<void>;
    /**
     * 更新一个支付项
     */
    updatePaymentAsync(orderUuid: string, paymentUuid: string, params: PaymentUpdateFields): Promise<void>;
    /**
     * 提交支付
     */
    submitPayAsync(orderUuid?: string): Promise<{
        status: 'success' | 'failed';
    }>;
    /**
     * 提交单个订单的支付（推送到任务队列）
     */
    private submitSingleOrderPayment;
    /**
     * 获取订单剩余待付金额
     */
    getRemainingOrderAmountAsync(orderUuid: string): Promise<number>;
    /**
     * 在比如现金支付界面的地方，用户输入了一个金额，在下方显示剩余多少金额，通过此方法获取
     */
    getRemainingOrderAmountWithInputAsync(inputAmount: string | number, orderUuid: string): Promise<number>;
    /**
     * 重新计算订单金额
     */
    private recalculateOrderAmount;
    /**
     * 获取现金支付方式
     */
    getCashPaymentMethod(): Promise<PaymentMethod | null>;
    /**
     * 获取Eftpos支付方式
     */
    getEftposPaymentMethod(): Promise<PaymentMethod | null>;
    /**
     * 获取钱包支付方式
     */
    getWalletPaymentMethod(): Promise<PaymentMethod | null>;
    /**
     * 确保支付模块所需的数据库表已创建
     */
    private ensurePaymentTables;
    /**
     * 获取部分支付的订单
     */
    getPartiallyPaidOrdersAsync(): Promise<PaymentOrder[]>;
    /**
     * 智能金额舍入
     *
     * 根据指定的舍入间隔和规则对金额进行舍入处理
     *
     * @param originalAmount 原始金额
     * @param interval 舍入间隔 (0.05, 0.1, 0.5, 1)
     * @param rule 舍入规则 (standard, standard_down, always_up, always_down)
     * @returns 舍入结果详情（包含原始金额、舍入后金额和舍入差额）
     */
    roundAmountAsync(originalAmount: number | string, interval: RoundingInterval | number, rule: RoundingRule | string): Promise<RoundingResult>;
    /**
     * 标准舍入处理（处理中点情况）
     *
     * @param value 要舍入的值
     * @param midpointUp 中点是否向上舍入
     * @returns 舍入后的值
     */
    private standardRound;
}
