/// <reference types="react" />
import type { BundleGroupItem, BundleItem, OptionGroupItem, SkuCardConfig, VariantProductItem, VariantGroupItem } from '../skuOptionsSelection/types';
import type { NumericStepperProps } from '../../pro/NumericStepper/index';
/**
 * 达到 min / max 限制时希望展示的提示文案。
 * 通常来自 item_rule_limit.maxValidationMessage / minValidationMessage。
 * 对应字段为空时该方向不 toast（仍会走 locales 里的默认兑底，详见 PisellSalesProductCard）。
 */
export interface SalesProductLimitMessage {
    max?: string;
    min?: string;
}
/**
 * 商品卡使用的 stepper 配置，在 NumericStepperProps 基础上扩展业务字段。
 */
export declare type SalesProductStepperProps = NumericStepperProps & {
    /**
     * 达到限制时希望展示的提示文案。支持：
     * - string：等价于 { max: string }（兼容旧用法）；
     * - { min?, max? }：min / max 分开配置。
     */
    limitMessage?: string | SalesProductLimitMessage;
};
export declare type SalesProductText = string | Record<string, string>;
/**
 * 从 SKUOptionsSelection 数据结构反推的完整商品定义。
 * 兼容普通商品、单规格商品、组合规格商品、套餐商品。
 */
export interface SalesProduct {
    id?: number | string;
    product_id?: number;
    product_variant_id?: number;
    title?: SalesProductText;
    name?: SalesProductText;
    product_subtitle?: string;
    subtitle?: string;
    description?: string | null;
    cover?: string;
    media?: Array<any>;
    price?: string | number;
    original_price?: string | number;
    selling_price?: string | number;
    payment_price?: string | number;
    tax_fee?: string | number;
    num?: number;
    quantity?: number;
    is_track?: 0 | 1;
    stock_quantity?: number;
    disabled?: 0 | 1 | boolean;
    is_bundle?: 0 | 1 | boolean;
    /**
     * 业务侧可能通过类型字段直接标识商品类型
     */
    type?: 'normal' | 'option' | 'variant' | 'bundle' | string;
    product_type?: 'normal' | 'option' | 'variant' | 'bundle' | string;
    /**
     * SKU 相关结构
     */
    option_group?: OptionGroupItem[];
    variant_group?: VariantGroupItem[];
    variant?: VariantProductItem[];
    bundle_group?: BundleGroupItem[] | BundleItem[];
    bundle_item?: BundleItem[];
    product_option_item?: Array<Record<string, any>>;
    product_bundle?: Array<Record<string, any>>;
    metadata?: Record<string, any>;
}
/**
 * PRD 中 products 数组单条 value 结构
 */
export interface SalesProductValue {
    /** 订单明细 ID，创建时可为 null */
    order_detail_id?: number | string | null;
    /** 商品 ID（自定义商品可为 null） */
    product_id?: number | string | null;
    /** 数量（初始化阶段可由外部后续补充） */
    num?: number;
    /** 多规格商品 ID */
    product_variant_id?: number | string;
    /** 选项配置 */
    product_option_item?: Array<Record<string, any>>;
    /** 销售单价（交易快照） */
    selling_price?: string;
    /** 原价（交易快照） */
    original_price?: string;
    /** 支付单价（交易快照） */
    payment_price?: string;
    /** 税费 */
    tax_fee?: string;
    /** 是否收税 */
    is_charge_tax?: 0 | 1;
    /** 折扣列表 */
    discount_list?: Array<Record<string, any>>;
    /** 套餐子商品 */
    product_bundle?: SalesProductBundleValue[];
    /** 元数据 */
    metadata?: {
        unique_identification_number?: string;
        [key: string]: any;
    };
}
/**
 * PRD 中 product_bundle 结构
 */
export interface SalesProductBundleValue {
    bundle_group_id?: number;
    bundle_id?: number;
    bundle_variant_id?: number;
    num?: number;
    extension_id?: number;
    extension_type?: string;
    option?: Array<Record<string, any>>;
}
export declare type SalesProductCardIntent = 'detail' | 'options' | 'quantity';
export declare type SalesProductCardTrigger = 'card' | 'button' | 'stepper';
export interface SalesProductCardMeta {
    intent: SalesProductCardIntent;
    trigger: SalesProductCardTrigger;
    product: SalesProduct;
}
export interface PisellSalesProductCardProps {
    product: SalesProduct;
    /** PRD products[i] value，组件会基于它进行增量更新并回传 */
    value?: Partial<SalesProductValue>;
    disabled?: boolean;
    stepperProps?: SalesProductStepperProps;
    optionsText?: string;
    skuCardConfig?: SkuCardConfig;
    cartElementId?: string;
    style?: React.CSSProperties;
    className?: string;
    onChange?: (value: SalesProductValue, meta: SalesProductCardMeta) => void;
    onClick?: (value: SalesProductValue, meta: SalesProductCardMeta) => void;
}
