import Decimal from 'decimal.js';
import { CartItem } from '../Cart/types';
import { ISummaryState } from './types';
export declare const calculatePriceDetails: (shopInfo: any, items: CartItem[], isInScheduleByDate: any, surchargeList: any[], scheduleById: Record<string, any>) => ISummaryState['summary'];
/**
 * 获取子商品折扣信息
 * @param item
 */
export declare const getBundleDiscountList: (bundle: any[]) => any[];
export declare const calcDiscountListDifference: (discountList: any[]) => any;
export declare const getProductDiscountProductDiscountDifference: (item: CartItem) => any;
/**
 * 计算订单税费（折扣前/折扣后），并把单品税费信息回写到商品数据上（用于明细展示/后续计算）。
 *
 * - **折扣前税费**：`originTax`
 * - **折扣后税费**：`tax`（会考虑 `computed.shopDiscount` 对每个商品的分摊影响）
 * - **税率/是否含税**：优先取 `bookingDetail.tax_rate` / `bookingDetail.is_price_include_tax`，取不到再回退到 `options.tax_rate` / `options.is_price_include_tax`
 *
 * **副作用（会修改入参商品对象）**：
 * - 主商品：写入 `item.original_tax_fee` / `item.tax_fee`（四舍五入保留两位）
 * - bundle 原价子商品：写入 `bundleItem.original_tax_fee` / `bundleItem.tax_fee`
 * - 加时商品（`relation_details`）：写入 `atItem.tax_fee`
 * - 税费舍入差值：追加到最后一个“含税商品”的 `tax_fee_rounding_remainder` / `original_tax_fee_rounding_remainder`
 *
 * @param params 入参集合（RORO）
 * @param params.service 服务商品数组（主商品）。通常是购物车商品结构（可能包含 `bundle` / `relation_details`）
 * @param params.addons 附加商品数组（可选）。结构同商品数组
 * @param params.bookingDetail 订单详情（编辑/详情场景用于读取后端税率配置），可选
 * @param params.bookingId 订单/预约 ID（编辑/详情场景识别用），可选
 * @param options 计算选项
 * @param options.isEdit 是否处于“编辑中”。当前实现不强依赖该值（历史逻辑保留），但建议按真实状态传入
 * @param options.computed 预计算结果（用于折扣分摊）
 * @param options.computed.productExpectAmount 商品期望总金额（用于按比例分摊折扣）
 * @param options.computed.shopDiscount 店铺折扣总额（用于按比例分摊到商品）
 * @param options.tax_rate 管理端税率（百分比，如 5 表示 5%）。仅当 `bookingDetail.tax_rate` 不存在时生效
 * @param options.is_price_include_tax 是否含税：`0` 不含税、`1` 含税。仅当 `bookingDetail.is_price_include_tax` 不存在时生效
 * @returns 税费汇总（number，金额单位与商品价格一致，四舍五入保留两位）
 * @returns.originTax 折扣前税费合计
 * @returns.tax 折扣后税费合计
 */
export declare const getTax: ({ service, addons, bookingDetail, bookingId }: {
    service?: any;
    addons?: any;
    bookingDetail?: any;
    bookingId?: number | undefined;
}, options: {
    isEdit: boolean;
    computed: Record<string, number | string>;
    tax_rate?: number;
    is_price_include_tax?: number;
} & Record<string, any>) => {
    originTax: number;
    tax: number;
};
/**
 * 计算商品小计（不含其他费用）
 * @param items - 购物车商品数组
 * @returns 商品总价字符串，保留2位小数
 */
export declare const calculateSubtotal: (items: CartItem[]) => string;
/**
 * 计算商品小计（不含其他费用 不包含折扣卡商品券抵扣金额）
 * @param items - 购物车商品数组
 * @returns 商品总价字符串，保留2位小数
 */
export declare const calculateOriginSubtotal: (items: CartItem[]) => string;
/**
 * @title: 单个商品的税费
 * @description:
 * 单个商品的税费 = 商品销售单价（折扣后） * 税率 * is_charge_tax /( 1+ 税率 * is_price_include_tax)
 * $taxFee = $price * $taxRate * $isChargeTax / (1 + $taxRate * $isPriceIncludeTax);
 * @return {*}
 * @Author: xiangfeng.xue
 */
export declare const calculateTaxFee: (shopInfo: any, items: CartItem[]) => Decimal | "0.00";
/**
 * @title: 计算定金
 * @param items - 购物车商品数组
 * @returns 定金字符串，保留2位小数
 */
export declare const calculateDeposit: (items: CartItem[]) => {
    total: string;
    protocols: any[];
    hasDeposit: never;
} | undefined;
/**
 * 计算订单附加费金额（订单级别合计）。
 *
 * - **详情未编辑**（`!options.isEdit && bookingId`）且存在后端详情时：直接返回 `bookingDetail.surcharge_fee`
 * - **新增/编辑**时：对 `surcharge`（通常为 `getSurcharge` 的返回值）按 `item.value` 求和
 *
 * @param params 入参集合（RORO）
 * @param params.bookingDetail 订单详情（详情未编辑时用于读取后端的 `surcharge_fee`），可选
 * @param params.bookingId 订单/预约 ID（详情未编辑时生效），可选
 * @param surcharge 附加费列表（通常来自 `getSurcharge`），元素结构至少包含 `value: number`
 * @param options 计算选项
 * @param options.isEdit 是否处于“编辑中”。`false` 时会优先走后端金额直取逻辑（若存在）
 * @returns 订单附加费金额（number，金额单位与商品价格一致）
 */
export declare const getSurchargeAmount: ({ bookingDetail, bookingId }: {
    bookingDetail?: any;
    bookingId?: number | undefined;
}, surcharge: any[], options: any) => any;
/**
 * 订单附加费各项信息
 *
 * - **详情未编辑**（`!options.isEdit && bookingId`）时：直接返回 `bookingDetail.surcharge`（后端计算结果）
 * - **新增/编辑**时：按 `options.surcharge_list` 逐条配置计算本次订单的附加费
 *
 * 规则要点：
 * - 匹配范围包含：主商品（`service`）、原价 bundle 子商品（`item.bundle`）、加时商品（`item.relation_details`）、以及 addons（`addons.value`）
 * - 固定附加费 `fixed`：只加一次，再按商品数量分摊（向下取整保留两位），剩余小数会以 `surcharge_rounding_remainder` 形式抹平到最后一个商品
 * - 百分比附加费 `percentage`：按每个商品（价格 * 数量）分别计算再累加
 * - 当 `open_product === 0`：不回写到商品，只在订单级别累加；否则会把单品附加费回写到商品
 *
 * **副作用（可能修改入参商品对象）**：
 * - 当 `open_product !== 0` 时：写入 `item.surcharge_fee`（单品单数量附加费，保留两位、向下取整）
 * - 写入 `item.relation_surcharge_ids`（关联到的 surcharge 配置 id 列表）
 * - 写入 `item.surcharge_rounding_remainder`（用于抹平固定附加费/总额舍入差）
 *
 * @param params 入参集合（RORO）
 * @param params.service 服务商品数组（主商品）。元素可能包含 `bundle` / `relation_details`
 * @param params.addons 附加商品容器。当前实现读取 `addons.value` 作为商品数组（所以通常传 `{ value: CartItem[] }`）
 * @param params.bookingDetail 订单详情（详情未编辑时用于直接取后端的 surcharge 列表），可选
 * @param params.bookingId 订单/预约 ID（详情未编辑时生效），可选
 * @param options 计算选项
 * @param options.isEdit 是否处于“编辑中”。`false` 且存在 `bookingId` 时会走详情直取逻辑
 * @param options.surcharge_list 附加费配置列表（后端下发）。缺失/为空则返回空数组
 * @param options.isInScheduleByDate 判断日期是否落在某个 schedule 内的方法（通常来自 ScheduleModule）
 * @param options.scheduleById schedule 映射表：`{ [scheduleId]: schedule }`（用于根据配置的 `available_schedule_ids` 做日程匹配）
 * @returns 附加费列表（仅返回金额 > 0 的项）
 */
export declare const getSurcharge: ({ service, addons, bookingDetail, bookingId }: {
    service: any;
    addons: any;
    bookingDetail?: any;
    bookingId?: number | undefined;
}, options: {
    isEdit: boolean;
    isInScheduleByDate: any;
    surcharge_list?: any[];
    scheduleById?: Record<string, any>;
} & Record<string, any>) => any;
