declare module "focus-product-extractor2" {
  interface CardMessageHeader {
    type: number;
    icon: string;
    title: string;
  }

  interface CardMessageContent {
    type: number;
    icon?: string;
    title: string;
    content: string;
  }

  interface CardMessageImage {
    type: number;
    url: string;
  }

  interface CardMessageWare {
    title: string;
    desc: string;
    price: number;
    num: number;
    image_url: string;
    ware_url: string;
  }

  interface CardMessageOrderItem {
    title: string;
    desc: string;
    extra_info: string[];
    price: number;
    num: number;
    image_url: string;
    ware_url: string;
  }

  interface CardMessageOrder {
    type: number;
    title: string;
    desc: string;
    order_id: string;
    total_price: string;
    list: CardMessageOrderItem[];
  }

  interface CardMessageInfo {
    title: string;
    desc: string;
  }

  interface CardMessageProgressItem {
    title: string;
    icon: string;
    color: string;
    desc: string;
    tip: string;
  }

  interface CardMessageCoupon {
    style: number;
    type: number;
    begin: number;
    end: number;
    name: string;
    status: number;
    discount: string;
    quota: string;
    tag: string;
    image_url: string;
  }

  interface MessageBase {
    type: number;
    sub_type: number;
    sku_id?: string;
    spu_id?: string;
    order_id?: string;
    question?: string;
    origin_data?: string;
  }

  interface TextMessage extends MessageBase {
    sub_type: 1;
    text: {
      content: string;
    };
  }

  interface ImageMessage extends MessageBase {
    sub_type: 2;
    image: {
      url: string;
      width: number;
      height: number;
    };
  }

  interface VideoMessage extends MessageBase {
    sub_type: 3;
    video: {
      url: string;
      width: number;
      height: number;
    };
  }

  interface CardMessage extends MessageBase {
    sub_type: 4;
    card_msg: {
      data: Array<{
        header?: CardMessageHeader;
        content?: CardMessageContent;
        img?: CardMessageImage;
        wares?: {
          type: number;
          list: CardMessageWare[];
        };
        orders?: CardMessageOrder;
        infos?: {
          type: number;
          list: CardMessageInfo[];
        };
        progress?: {
          type: number;
          list: CardMessageProgressItem[];
        };
        coupons?: {
          type: number;
          list: CardMessageCoupon[];
        };
      }>;
    };
  }

  interface FileMessage extends MessageBase {
    sub_type: 5;
    file: {
      url: string;
    };
  }

  interface BuyerEnterMessage extends MessageBase {
    sub_type: 6;
    buyer_enter_msg: {
      from: string;
      sku_id: string;
      spu_id: string;
      order_id: string;
    };
  }

  interface TransferOutMessage extends MessageBase {
    sub_type: 7;
    transfer_out: {
      from: string;
      from_spin: string;
      to_spin: string;
      pin: string;
      order_id: string;
      plat_goods_id: string;
    };
  }

  interface TransferInMessage extends MessageBase {
    sub_type: 8;
    transfer_in: {
      from: string;
      from_spin: string;
      to_spin: string;
      pin: string;
      order_id: string;
      plat_goods_id: string;
    };
  }

  interface VoiceMessage extends MessageBase {
    sub_type: 9;
    voice: {
      url: string;
      duration: number;
    };
  }

  type ChatMessage =
    | TextMessage
    | ImageMessage
    | VideoMessage
    | CardMessage
    | FileMessage
    | BuyerEnterMessage
    | TransferOutMessage
    | TransferInMessage
    | VoiceMessage;

  interface OrderItem {
    id: string;
    name?: string;
    price?: number;
    status?: string;
    create_time?: number;
    sku_id?: string;
    spu_id?: string;
    image_url?: string;
  }

  interface CustomRule {
    pattern: string;
    flags?: string;
    description?: string;
  }

  interface ProcessInput {
    scene?: "chat" | "order"; // 可选参数，不传递的时候就是全部提取，当传chat就代表只从聊天中提取，传order就代表只从order中提取
    platform: string;
    shopId: string;
    rawData: {
      messages?: Array<{
        sender: "buyer" | "service" | "system";
        timestamp: number;
        message: ChatMessage;
      }>;
      orderItems?: OrderItem[];
    };
    rules?: {
      sources?: ("buyer" | "service" | "system")[];
      customRules?: CustomRule[];
    };
    authConfig?: {
      taobaoAuth?: string;
      domesticAuth?: string;
      overseasAuth?: string;
    };
  }

  interface ProcessResultItem {
    goodsId?: string;
    spuId?: string;
    orderId?: string;
    name?: string;
    source?: string;
    matchedText?: string;
    metadata: any;
  }

  interface ProcessResult {
    items: ProcessResultItem[];
  }

  const FocusProductExtractor: {
    process(input: ProcessInput): ProcessResult;
  };

  // 确保类型声明兼容两种导入方式
  export = FocusProductExtractor;
  export as namespace FocusProductExtractor;
}
