import type { ScheduleEventResource } from '../resource/types';
/**
 * Order 模块主键类型（对齐标准 Sales 协议的 order_id）
 */
export type OrderId = number | string;
/**
 * 协议中金额类字段多为 string 快照（交易时价格不可从基准商品重算）
 */
export type OrderMoneyString = string;
/** 订单类型。文档：appointment_booking / ticket / virtual。来源：Order.type */
export type OrderType = 'appointment_booking' | 'ticket' | 'virtual' | string;
/**
 * 来源平台。文档：shop / pos / kiosk / h5 / app / mini-program。
 * 来源：Order.platform
 */
export type OrderPlatform = 'shop' | 'pos' | 'kiosk' | 'h5' | 'app' | 'mini-program' | string;
/** 订单状态（仅输出）。文档：open / completed / cancelled。来源：Order.status */
export type OrderStatus = 'open' | 'completed' | 'cancelled' | string;
/** 支付状态。来源：Order.payment_status */
export type OrderPaymentStatus = 'payment_processing' | 'paid' | 'unpaid' | 'partially_paid' | string;
/** 发货状态（仅输出）。来源：Order.shipping_status */
export type OrderShippingStatus = 'unfulfilled' | 'fulfilled' | string;
/**
 * 预约子事件状态（仅输出）。
 * 文档：new / confirmed / arrived / started / completed / cancelled。
 * 来源：ScheduleEvent.appointment_status
 */
export type AppointmentStatus = 'new' | 'confirmed' | 'arrived' | 'started' | 'completed' | 'cancelled' | string;
/** 折扣类型：shop（整单）/ product（商品）。来源：Discount.type */
export type OrderProductDiscountType = 'shop' | 'product' | string;
/** 支付记录状态：paid / voided / payment_pending 等。来源：OrderPayment.status */
export type OrderPaymentRecordStatus = 'paid' | 'voided' | 'payment_pending' | string;
/** 附加费类型。来源：OrderSurcharge.type */
export type OrderSurchargeType = string;
/** 商品折扣 metadata，常含 unique_identification_number */
export interface OrderProductDiscountMetadata {
    /** 设备端本地唯一标识，用于与服务端记录对齐 */
    unique_identification_number?: string;
    [key: string]: unknown;
}
/**
 * 商品折扣项（3.3.1 discount_list）
 */
export interface OrderProductDiscountItem {
    /** 折扣记录 ID；更新时传，创建时 null。来源：Discount.id */
    order_discount_id?: number | null;
    /** 折扣类型：shop / product */
    type?: OrderProductDiscountType;
    /** 关联折扣规则 ID。来源：Discount.discount_id */
    discount_id?: number;
    /** 折扣金额。来源：Discount.amount */
    amount?: OrderMoneyString;
    /** 折扣详情。来源：Discount.discount */
    discount?: Record<string, unknown>;
    /** 元数据。来源：Discount.metadata */
    metadata?: OrderProductDiscountMetadata | null;
}
/**
 * 套餐子商品（3.3.2 product_bundle）
 */
export interface OrderProductBundleItem {
    /** 套餐组 ID */
    bundle_group_id?: number;
    /** 套餐商品 ID */
    bundle_id?: number;
    /** 套餐商品规格 ID */
    bundle_variant_id?: number;
    /** 数量 */
    num?: number;
    /** 扩展 ID */
    extension_id?: number;
    /** 扩展类型 */
    extension_type?: string;
    /** 选项 */
    option?: unknown[];
}
/** 商品行 metadata，常含 unique_identification_number */
export interface OrderProductMetadata {
    /** 设备端本地唯一标识，用于与服务端明细对齐 */
    unique_identification_number?: string;
    [key: string]: unknown;
}
export interface OrderProductTitleSnapshot {
    en: string | null;
    ja: string | null;
    pt: string | null;
    auto: string | null;
    'zh-CN': string | null;
    'zh-HK': string | null;
    kitchen: string | null;
    original: string | null;
}
/**
 * 订单级商品行（3.3 products）。
 * 订单级别的非预约关联商品；预约关联商品在 bookings 内。
 * product_id 为关联 ID，展示信息从本地基准数据取；价格为交易快照须保留在 Sales 数据中。
 */
export interface OrderProductLineItem {
    /** 订单明细 ID；更新时传，创建时 null。来源：Detail.id */
    order_detail_id?: number | null;
    /** 商品 ID；null 表示自定义商品。来源：Detail.product_id */
    product_id?: number | null;
    /** 数量。创建/更新时必填。来源：Detail.product_quantity */
    num: number;
    /** 商品标题快照；本地待同步订单会补齐为多语言对象。 */
    product_title?: OrderProductTitleSnapshot | string | null;
    /** 多规格 ID。来源：Detail.product_variant_id */
    product_variant_id?: number;
    /**
     * 销售单价（交易快照，仅输出）。
     * 来源：Detail.selling_price
     */
    selling_price?: OrderMoneyString;
    /**
     * 原价（交易快照，仅输出）。
     * 来源：Detail.original_price
     */
    original_price?: OrderMoneyString;
    /**
     * 实际支付单价（交易快照，仅输出）。
     * 来源：Detail.payment_price
     */
    payment_price?: OrderMoneyString;
    /** 商品税费（仅输出）。来源：Detail.tax_fee */
    tax_fee?: OrderMoneyString;
    /** 是否收税 0/1（仅输出）。来源：Detail.is_charge_tax */
    is_charge_tax?: 0 | 1;
    /** 商品折扣列表 */
    discount_list?: OrderProductDiscountItem[];
    /** 套餐子商品 */
    product_bundle?: OrderProductBundleItem[];
    /** 元数据；含 unique_identification_number。来源：Detail.metadata */
    metadata?: OrderProductMetadata | null;
    /** 关联子预约 ID（仅输出，预约订单场景）。来源：Detail.schedule_event_id */
    schedule_event_id?: number | null;
}
/** 预约条目 metadata，常含 unique_identification_number */
export interface OrderBookingMetadata {
    /** 设备端本地唯一标识，用于与服务端子预约对齐 */
    unique_identification_number?: string;
    [key: string]: unknown;
}
/**
 * 单条预约（子 schedule_event，parent_id != 0）。
 * product 结构同 products 单项；relation_products 结构同 products 数组。
 */
export interface OrderBookingItem {
    /** 子预约 ID；更新时传。来源：ScheduleEvent.id */
    schedule_event_id?: number | null;
    /** 预约号（仅输出）。来源：ScheduleEvent.booking_id */
    booking_id?: string;
    /**
     * 预约状态（仅输出）。
     * new / confirmed / arrived / started / completed / cancelled。
     * 来源：ScheduleEvent.appointment_status
     */
    appointment_status?: AppointmentStatus;
    /**
     * 兼容历史：部分数据仍用 status 表示预约状态
     */
    status?: string;
    /** 预定开始日期 Y-m-d。来源：ScheduleEvent.start_date */
    start_date?: string;
    /** 预定开始时间 H:i。来源：ScheduleEvent.start_time */
    start_time?: string;
    /** 预定结束日期 Y-m-d。来源：ScheduleEvent.end_date */
    end_date?: string;
    /** 预定结束时间 H:i。来源：ScheduleEvent.end_time */
    end_time?: string;
    /** 全天选择日期 Y-m-d。来源：ScheduleEvent.select_date */
    select_date?: string;
    /** 服务时长（分钟）。来源：ScheduleEvent.duration */
    duration?: number;
    /** 实际到店时间（仅输出）。来源：ScheduleEvent.arrived_at */
    arrived_at?: string | null;
    /** 实际结束时间（仅输出）。来源：ScheduleEvent.completed_at */
    completed_at?: string | null;
    /** 子类型。来源：ScheduleEvent.sub_type */
    sub_type?: string;
    /** 特殊状态：common / like。来源：ScheduleEvent.like_status */
    like_status?: string;
    /** 预约人数 / 容量占用。来源：ScheduleEvent.number */
    number?: number;
    /** 关联资源（见协议 3.4.1） */
    resources?: ScheduleEventResource[];
    /**
     * 预约主商品（结构同 products 单项；协议创建时必填）。
     * 兼容未同步完整的旧数据可为空。
     */
    product?: OrderProductLineItem;
    /** 预约附属商品（结构同 products 数组） */
    relation_products?: OrderProductLineItem[];
    /** 关联类型（如 form）。来源：ScheduleEvent.relation_type */
    relation_type?: string;
    /** 关联资源 ID。来源：ScheduleEvent.relation_id */
    relation_id?: number;
    /** 预约关联表单 */
    relation_forms?: unknown[];
    /** 预约主体参数 */
    holder?: Record<string, unknown> | null;
    /** 元数据；含 unique_identification_number。来源：ScheduleEvent.metadata */
    metadata?: OrderBookingMetadata | null;
    /**
     * 与订单明细等资源的关联（如 resource_type 为订单 Detail 时 resource_id 对应 order_detail_id）。
     * 来源：服务端 ScheduleEvent 关联表。
     */
    relation_items?: {
        resource_id?: number | null;
        [key: string]: unknown;
    }[];
}
/** 支付记录 metadata，常含 unique_payment_number */
export interface OrderPaymentMetadata {
    /** 设备端本地支付唯一标识 */
    unique_payment_number?: string;
    [key: string]: unknown;
}
/**
 * 支付记录（3.5 payments）
 */
export interface OrderPaymentItem {
    /** 支付记录 ID；存量/更新时传。来源：OrderPayment.id */
    order_payment_id?: number | null;
    /** 支付方式 ID（设备端从本地支付方式配置取详情）。来源：OrderPayment.custom_payment_id */
    custom_payment_id?: number;
    /** 支付方式编码。来源：OrderPayment.payment_method */
    code?: string;
    /** 支付方式名称 */
    name?: string;
    /** 支付类型：如 deposit。来源：OrderPayment.type */
    type?: string;
    /** Wallet Pass ID。来源：OrderPayment.voucher_id */
    voucher_id?: number | null;
    /** 支付金额。创建时必填。来源：OrderPayment.amount */
    amount: OrderMoneyString;
    /** 原始金额（仅输出）。来源：OrderPayment.origin_amount */
    origin_amount?: OrderMoneyString;
    /** Rounding 金额（仅输出）。来源：OrderPayment.rounding_amount */
    rounding_amount?: OrderMoneyString;
    /** 支付状态：paid / voided / payment_pending 等 */
    status?: OrderPaymentRecordStatus;
    /** 支付时间（仅输出）。来源：OrderPayment.payment_time */
    payment_time?: string | null;
    /** 手续费配置。来源：OrderPayment.service_charge */
    service_charge?: Record<string, unknown> | null;
    /** Wallet Pass 使用单位 */
    wallet_pass_usage_unit?: unknown[] | null;
    /** Wallet Pass 使用值 */
    wallet_pass_use_value?: number | null;
    /** 元数据；含 unique_payment_number。来源：OrderPayment.metadata */
    metadata?: OrderPaymentMetadata | null;
}
/**
 * 订单附加费（3.6 surcharges）
 */
export interface OrderSurchargeItem {
    /** 订单附加费记录 ID（仅输出）。来源：OrderSurcharge.id */
    order_surcharge_id?: number | null;
    /** 附加费配置 ID。来源：OrderSurcharge.surcharge_id */
    surcharge_id: number;
    /** 附加费类型。来源：OrderSurcharge.type */
    type: OrderSurchargeType;
    /** 名称（多语言 JSON）。来源：OrderSurcharge.name */
    name?: Record<string, string>;
    /** 描述（多语言 JSON）。来源：OrderSurcharge.description */
    description?: Record<string, string>;
    /** 百分比费率。来源：OrderSurcharge.percentage */
    percentage?: OrderMoneyString | null;
    /** 固定金额。来源：OrderSurcharge.fixed */
    fixed?: OrderMoneyString | null;
    /** 附加费金额。来源：OrderSurcharge.amount */
    amount: OrderMoneyString;
}
export interface OrderSummary {
    /** 商品总数量。来源：Order.product_quantity */
    product_quantity?: number;
    /** 商品原价总额。来源：Order.product_original_amount */
    product_original_amount?: OrderMoneyString;
    /** 商品实际支付总额。来源：Order.product_amount */
    product_amount?: OrderMoneyString;
    /** 商品预计支付总额。来源：Order.product_expect_amount */
    product_expect_amount?: OrderMoneyString;
    /** 商品总税费。来源：Order.product_tax_fee */
    product_tax_fee?: OrderMoneyString;
    /** 运费。来源：Order.shipping_fee */
    shipping_fee?: OrderMoneyString;
    /** 运费税。来源：Order.shipping_tax_fee */
    shipping_tax_fee?: OrderMoneyString;
    /** 订单总税费。来源：Order.tax_fee */
    tax_fee?: OrderMoneyString;
    /** 附加费总额。来源：Order.surcharge_fee */
    surcharge_fee?: OrderMoneyString;
    /** 优惠总额。来源：Order.discount_amount */
    discount_amount?: OrderMoneyString;
    /** 定金金额。来源：Order.deposit_amount */
    deposit_amount?: OrderMoneyString;
    /** 预计总金额（不含手续费）。来源：Order.expect_amount */
    expect_amount?: OrderMoneyString;
    /** 订单总金额（实际应付）。来源：Order.total_amount */
    total_amount?: OrderMoneyString;
    /** 差额。来源：Order.amount_gap */
    amount_gap?: OrderMoneyString;
    /** Rounding 金额。来源：Order.rounding_amount */
    rounding_amount?: OrderMoneyString;
    /** 支付手续费。来源：Order.pay_service_charge_amount */
    pay_service_charge_amount?: OrderMoneyString;
}
/**
 * 订单数据结构（Server 侧对齐《统一 Sales 数据协议》）
 */
export interface OrderData {
    /**
     * 订单主键：有值表示更新，null 表示创建。
     * 来源：Order.id
     */
    order_id?: OrderId | null;
    /** 系统订单号（仅输出）。来源：Order.order_number */
    order_number?: string;
    /** 商户订单号（仅输出）。来源：Order.shop_order_number */
    shop_order_number?: string;
    /** 订单类型：appointment_booking / ticket / virtual。来源：Order.type */
    type?: OrderType;
    /** 业务编码。来源：Order.business_code */
    business_code?: string;
    /** 来源平台。来源：Order.platform */
    platform?: OrderPlatform;
    /** 销售渠道（文档示例 my_pisel）。来源：Order.sales_channel */
    sales_channel?: string;
    /** 订单销售渠道。来源：Order.order_sales_channel */
    order_sales_channel?: string;
    /** 订单状态 open / completed / cancelled（仅输出）。来源：Order.status */
    status?: OrderStatus;
    /** 支付状态。来源：Order.payment_status */
    payment_status?: OrderPaymentStatus;
    /** 发货状态（仅输出）。来源：Order.shipping_status */
    shipping_status?: OrderShippingStatus;
    /** 券列表。来源：Order.vouchers */
    vouchers?: any[];
    /**
     * 客户 ID（设备端从本地客户数据取详情）。
     * 来源：Order.customer_id
     */
    customer_id?: number | string;
    /** 客户名称。来源：Order.customer_name */
    customer_name?: string;
    /** 国家呼号。来源：Order.country_calling_code */
    country_calling_code?: string;
    /** 手机号。来源：Order.phone */
    phone?: string;
    /** 邮箱。来源：Order.email */
    email?: string;
    /** 是否含税 0/1。来源：Order.is_price_include_tax */
    is_price_include_tax?: 0 | 1;
    /** 税种名称。来源：Order.tax_title */
    tax_title?: string;
    /** 税种国家编码。来源：Order.tax_country_code */
    tax_country_code?: string;
    /** 货币编码。来源：Order.currency_code */
    currency_code?: string;
    /** 货币符号。来源：Order.currency_symbol */
    currency_symbol?: string;
    /** 货币格式。来源：Order.currency_format */
    currency_format?: string;
    /** 是否收取定金 0/1。来源：Order.is_deposit */
    is_deposit?: 0 | 1;
    /** 定金金额。来源：Order.deposit_amount */
    deposit_amount?: OrderMoneyString;
    /** 整单优惠金额。来源：Order.shop_discount */
    shop_discount?: OrderMoneyString;
    /** 附加费总额。来源：Order.surcharge_fee */
    surcharge_fee?: OrderMoneyString;
    /** 订单备注。来源：Order.note */
    note?: string;
    /** 预约日期。来源：Order.schedule_date */
    schedule_date?: string;
    /** 创建时间。来源：Order.created_at */
    created_at?: string;
    /** 更新时间（本地或同步字段） */
    updated_at?: string | number;
    /** 订单级非预约关联商品 */
    products?: OrderProductLineItem[];
    /** 预约数组，每项对应一个子预约 */
    bookings?: OrderBookingItem[];
    /** 支付数组 */
    payments?: OrderPaymentItem[];
    /** 附加费数组 */
    surcharges?: OrderSurchargeItem[];
    /** 整单/订单级折扣列表（结构与 3.3.1 商品折扣项一致时可复用） */
    discount_list?: OrderProductDiscountItem[];
    /** 订单关联表单 */
    relation_forms?: unknown[];
    /** 联系人列表（协议顶层数组，结构由业务约定） */
    contacts?: unknown[];
    /** 联系人信息（协议顶层数组，结构由业务约定） */
    contacts_info?: unknown[];
    /** 订单级主体参数 */
    holder?: Record<string, unknown> | null;
    /**
     * 金额汇总（仅输出）。
     * 由服务端 OrderV2Service::computeOrderSummaryData() 生成；离线可按同算法本地计算。
     */
    summary?: OrderSummary;
    /** 扩展元数据。来源：Order.metadata */
    metadata?: Record<string, unknown> | null;
    /** 本地辅助字段 */
    shop_id?: number;
    create_date?: string;
    /** 本地待同步标记：1 表示需要后续同步到云端 */
    need_sync?: 0 | 1 | number;
    /** 兼容：部分场景仍使用顶层 total_amount */
    total_amount?: OrderMoneyString | number;
    /** 扩展字段（物流、标签等）；使用 any 以便筛选与数据源扩展 */
    [key: string]: any;
}
/** 去掉 bookings 后的订单快照；展开预约行时挂在 {@link BookingData.order} 上 */
export type OrderWithoutBookings = Omit<OrderData, 'bookings'>;
/**
 * 展开后的单条预约视图：协议 {@link OrderBookingItem} 平铺字段 + 所属订单（不含 bookings）+
 * 当前预约归属的商品行（由订单 products 按 schedule_event_id / relation_items 归集，不修改 order）
 */
export type BookingData = OrderBookingItem & {
    order: OrderWithoutBookings;
    products: OrderProductLineItem[];
};
/**
 * 订单列表筛选条件（与 order.ts getFilterButtonList 等 UI 对齐）
 */
export interface OrderFilters {
    keyword?: string;
    order_by?: string;
    sort?: 'desc' | 'asc';
    status?: string[];
    payment_status?: string[];
    shipping_status?: string[];
    customer_id?: string | number;
    order_sales_channel?: string[];
    payment_methods?: string[];
    min_total_amount?: number;
    max_total_amount?: number;
    tag_ids?: (string | number)[];
    shipping_type?: string[];
    delivery_zone_name?: string;
    location_id?: string | number;
    shipping_order_number?: string;
    logistics_company_id?: (string | number)[];
    zip?: string;
    business_code?: string;
    start_time?: string;
    end_time?: string;
    /** 分页：每页条数 */
    num?: number;
    /** 分页：页码，从 1 起 */
    skip?: number;
}
/**
 * 预约展开列表筛选条件（订单级条件匹配 booking.order.*，预约级匹配 booking 自身）
 */
export interface BookingFilters {
    keyword?: string;
    order_by?: string;
    order_payment_status?: string[];
    order_status?: string[];
    order_sales_channel?: string[];
    customer_id?: string | number;
    payment_method?: string[];
    business_code?: string;
    appointment_status?: string[];
    sales_time_between?: string[];
    /**
     * 仅保留「预约开始时刻」大于等于该时间的条目。
     * 预约时刻由 start_date 与 start_time 拼接解析（与 order_by start_at 一致）。
     * 示例：`2026-03-27 14:23:47`
     */
    after_execution_time?: string;
    created_at_between?: string[];
    updated_at_between?: string[];
    number_between?: (string | number)[];
    form_record_ids?: number[];
    total_amount_between?: [number | undefined | null, number | undefined | null];
    /**
     * 子预约过滤开关：
     * - 1：启用子预约规则 `(parent_id != 0 && item_type != 'recurring_booking') || (parent_id == 0 && item_type == 'recurring_booking')`
     * - 0 / null / undefined：不启用该规则
     */
    child_booking?: 0 | 1 | null;
    num?: number;
    skip?: number;
}
/** 分页筛选结果通用结构 */
export interface OrderModulePagedResult<T> {
    list: T[];
    count: number;
    size: number;
    skip: number;
}
/** 单条筛选未命中说明（用于排查过滤原因） */
export interface OrderFilterRejectDetail {
    /** 对应 OrderFilters 维度的标识 */
    field: string;
    /** 订单上该维度的当前值 */
    actual: unknown;
    /** 本次筛选的期望值/区间（便于对照） */
    expected?: unknown;
}
/** 未通过筛选的订单及首个未满足条件（与过滤短路顺序一致） */
export interface OrderFilterRejectedEntry {
    order_id?: OrderId | null;
    /** 系统订单号等，便于与业务「订单号」对照 */
    order_number?: string;
    /** 按筛选顺序命中的第一条未满足条件 */
    reason: OrderFilterRejectDetail;
}
export type OrderFilterResult = OrderModulePagedResult<OrderData> & {
    /** 被过滤掉的订单及首个命中原因（与筛选短路顺序一致；不含仅分页未展示的已通过订单） */
    rejected: OrderFilterRejectedEntry[];
};
export type BookingFilterResult = OrderModulePagedResult<BookingData>;
/**
 * SSE 同步配置
 */
export interface OrderSSESyncConfig {
    startDate: string;
    endDate: string;
    rangeDays?: number;
}
/**
 * Ably 事件类型
 */
export type OrderAblyEventType = 'created' | 'updated' | 'deleted';
/**
 * Ably 事件载荷
 */
export interface OrderAblyEventPayload {
    type: OrderAblyEventType;
    data: OrderData;
    order_id?: OrderId;
    timestamp: number;
}
/**
 * 订单变更广播载荷。
 * 用于保留原有全量列表通知能力，同时让订阅方可按 changedOrders 做增量处理。
 *
 * @example
 * const changedOrders = payload.changedOrders
 */
export interface OrderChangedPayload {
    /** 当前订单 store 全量列表，兼容既有重算列表订阅 */
    list: OrderData[];
    /** 本次明确发生变更的订单；全量刷新等无法确定 delta 的场景可为空 */
    changedOrders: OrderData[];
    /** 触发来源，便于订阅者区分 pubsub / 远端覆盖 / 清空等场景 */
    source?: string;
}
/**
 * OrderSyncMessage - pubsub 同步消息结构
 */
export interface OrderSyncMessage {
    module?: string;
    type?: 'created' | 'updated' | 'deleted' | 'batch_updated' | string;
    action?: string;
    operation?: string;
    id?: OrderId;
    order_id?: OrderId;
    ids?: OrderId[];
    order_no?: string;
    body?: Partial<OrderData>;
    data?: Partial<OrderData>;
    change_types?: string[];
    relation_order_ids?: OrderId[];
    _channelKey?: string;
}
/**
 * Order 模块状态
 */
export interface OrderState {
    /** 订单列表 */
    list: OrderData[];
    /** 订单 Map 缓存（以 id 为 key，加速查询） */
    map: Map<OrderId, OrderData>;
    /** 订单创建时间查询区间 */
    createdAtQuery: {
        sales_time_between?: string[];
    };
}
/**
 * Order 模块钩子
 */
export declare enum OrderHooks {
    onOrdersLoaded = "order:onOrdersLoaded",
    onOrdersChanged = "order:onOrdersChanged",
    onOrdersSyncCompleted = "order:onOrdersSyncCompleted"
}
