import { CSSProperties, ReactNode } from "react";

//#region src/pro/pisellPaymentList/types.d.ts
/**
 * 支付方式类型
 */
type PaymentMethodType = 'card' | 'cash' | 'custom';
/**
 * Icon 配置
 */
interface PisellPaymentListItemIconConfig {
  /** icon 区域大小 */
  size?: string | number;
  /** icon 颜色 */
  iconColor?: string;
  /** icon 背景颜色 */
  backgroundColor?: string;
  /** icon 类型（可以自定义 iconfont 类型） */
  iconType?: string;
  /** icon 大小（图标本身的大小） */
  iconSize?: string | number;
}
/**
 * 单个 Item 的完整配置
 */
interface PisellPaymentListItemFullConfig {
  containerStyle?: PisellPaymentListItemContainerStyle;
  titleStyle?: PisellPaymentListItemTitleStyle;
  iconConfig?: PisellPaymentListItemIconConfig;
  surchargeConfig?: PisellPaymentListItemSurchargeConfig;
  actionConfig?: PisellPaymentListItemActionConfig;
}
/**
 * 扩展的支付方式接口
 */
interface ExtendedPaymentMethod {
  /** 支付方式ID */
  id: string;
  /** 支付方式名称 */
  name: string;
  /** 支付方式代码 */
  code: string;
  /** 支付方式类型 */
  type: PaymentMethodType;
  /** 手续费 */
  surcharge: string;
  /** 是否启用手续费 */
  is_surcharge?: boolean;
  /** 固定手续费 */
  fixed?: number;
  /** 百分比手续费 */
  percentage?: number;
  /** 总金额 */
  totalAmount?: string;
  /** 该支付方式的特定配置（优先级高于 List 的 itemConfig） */
  itemConfig?: PisellPaymentListItemFullConfig;
}
/**
 * 标题样式配置
 */
interface PisellPaymentListItemTitleStyle {
  /** 标题文本（覆盖默认名称） */
  text?: string;
  /** 文本颜色 */
  color?: string;
  /** 文本大小 */
  fontSize?: string | number;
  /** 文本粗细 */
  fontWeight?: string | number;
  /** 选中状态的文本颜色（用于单选模式） */
  selectedColor?: string;
}
/**
 * 编辑按钮样式配置
 */
interface PisellPaymentListItemEditButtonStyle {
  /** 编辑按钮图标类型 */
  icon?: string;
  /** 图标大小 */
  iconSize?: string | number;
  /** 图标颜色 */
  iconColor?: string;
  /** 背景颜色 */
  backgroundColor?: string;
  /** 上边距 */
  marginTop?: string | number;
  /** 下边距 */
  marginBottom?: string | number;
  /** 左边距 */
  marginLeft?: string | number;
  /** 右边距 */
  marginRight?: string | number;
  /** 内边距 */
  padding?: string | number;
  /** 圆角 */
  borderRadius?: string | number;
  /** 边框 */
  border?: string;
}
/**
 * Surcharge 样式配置
 */
interface PisellPaymentListItemSurchargeConfig {
  /** 是否显示 Surcharge */
  show?: boolean;
  /** Surcharge 提示文本 */
  label?: string;
  /** 是否开启价格更改 */
  enablePriceChange?: boolean;
  /** 文本颜色 */
  color?: string;
  /** 文本大小 */
  fontSize?: string | number;
  /** 文本粗细 */
  fontWeight?: string | number;
  /** 是否启用编辑按钮 */
  enableEdit?: boolean;
  /** 编辑按钮样式配置 */
  editButtonStyle?: PisellPaymentListItemEditButtonStyle;
  /** 选中状态的文本颜色（用于单选模式） */
  selectedColor?: string;
}
/**
 * 右侧按钮样式配置
 */
interface PisellPaymentListItemButtonStyle {
  /** 按钮文本 */
  text?: string;
  /** 文本颜色 */
  color?: string;
  /** 文本大小 */
  fontSize?: string | number;
  /** 文本粗细 */
  fontWeight?: string | number;
  /** 按钮背景色 */
  backgroundColor?: string;
  /** 按钮内边距 */
  padding?: string | number;
  /** 按钮圆角 */
  borderRadius?: string | number;
  /** 按钮边框 */
  border?: string;
}
/**
 * 右侧箭头样式配置
 */
interface PisellPaymentListItemArrowStyle {
  /** 箭头图标类型 */
  icon?: string;
  /** 图标颜色 */
  iconColor?: string;
  /** 图标大小 */
  iconSize?: string | number;
  /** 背景区域背景色 */
  backgroundColor?: string;
  /** 背景区域内边距 */
  padding?: string | number;
  /** 背景区域圆角 */
  borderRadius?: string | number;
  /** 背景区域边框 */
  border?: string;
}
/**
 * 单选按钮样式配置
 */
interface PisellPaymentListItemRadioStyle {
  /** 单选按钮大小 */
  size?: number;
  /** 选中时的边框颜色 */
  checkedBorderColor?: string;
  /** 选中时的背景颜色 */
  checkedBackgroundColor?: string;
  /** 选中时的内圆颜色 */
  checkedDotColor?: string;
  /** 未选中时的边框颜色 */
  uncheckedBorderColor?: string;
  /** 未选中时的背景颜色 */
  uncheckedBackgroundColor?: string;
}
/**
 * 右侧操作区域配置
 */
interface PisellPaymentListItemActionConfig {
  /** 是否显示右侧操作区域 */
  show?: boolean;
  /** 操作样式：'radio' 单选模式 | 'button' 按钮模式（默认） */
  style?: 'radio' | 'button';
  /** 按钮类型：'button' 按钮 | 'arrow' 箭头（仅在 style 为 'button' 时有效） */
  buttonType?: 'button' | 'arrow';
  /** 按钮样式配置 */
  buttonStyle?: PisellPaymentListItemButtonStyle;
  /** 箭头样式配置 */
  arrowStyle?: PisellPaymentListItemArrowStyle;
  /** 单选按钮样式配置 */
  radioStyle?: PisellPaymentListItemRadioStyle;
}
/**
 * Item 容器样式配置
 */
interface PisellPaymentListItemContainerStyle {
  /** 背景颜色 */
  backgroundColor?: string;
  /** 边框 */
  border?: string;
  /** 内边距 */
  padding?: string | number;
  /** 圆角 */
  borderRadius?: string | number;
  /** 内部元素间距 */
  gap?: string | number;
  /** 选中状态的边框（用于单选模式） */
  selectedBorder?: string;
  /** 选中状态的背景色（用于单选模式） */
  selectedBackgroundColor?: string;
}
/**
 * PisellPaymentListItem 组件属性
 */
interface PisellPaymentListItemProps {
  /** 支付方式数据 */
  method: ExtendedPaymentMethod;
  /** 金额符号 */
  amountSymbol?: string;
  /** 自定义金额 */
  customAmount?: string | number;
  /** 是否禁用 */
  disabled?: boolean;
  /** 是否选中（用于单选模式） */
  selected?: boolean;
  /** 选择回调 */
  onSelect?: (method: ExtendedPaymentMethod) => void;
  /** 编辑按钮点击回调 */
  onEdit?: (method: ExtendedPaymentMethod) => void;
  /** 获取文本的函数 */
  getText?: (key: string, fallback?: string) => string;
  /** 自定义类名 */
  className?: string;
  /** 自定义样式 */
  style?: CSSProperties;
  /** 容器样式配置 */
  containerStyle?: PisellPaymentListItemContainerStyle;
  /** 标题样式配置 */
  titleStyle?: PisellPaymentListItemTitleStyle;
  /** Icon 配置 */
  iconConfig?: PisellPaymentListItemIconConfig;
  /** Surcharge 配置 */
  surchargeConfig?: PisellPaymentListItemSurchargeConfig;
  /** 右侧操作区域配置 */
  actionConfig?: PisellPaymentListItemActionConfig;
}
/**
 * 插槽配置接口
 */
interface PisellPaymentListSlots {
  /** 顶部插槽内容 */
  top?: ReactNode;
  /** 底部插槽内容 */
  bottom?: ReactNode;
  /** 左侧插槽内容 */
  left?: ReactNode;
  /** 右侧插槽内容 */
  right?: ReactNode;
}
/**
 * 容器样式配置接口
 */
interface PisellPaymentListContainerStyle {
  /** 背景颜色 */
  backgroundColor?: string;
  /** 边框样式 */
  border?: string;
  /** 边框宽度 */
  borderWidth?: string | number;
  /** 边框颜色 */
  borderColor?: string;
  /** 边框样式（solid, dashed等） */
  borderStyle?: string;
  /** 内边距 */
  padding?: string | number;
  /** 圆角 */
  borderRadius?: string | number;
}
/**
 * 滚动按钮样式配置接口
 */
interface PisellPaymentListScrollButtonStyle {
  /** 是否显示滚动按钮 */
  show?: boolean;
  /** 按钮区域高度 */
  height?: number;
  /** 背景颜色 */
  backgroundColor?: string;
  /** 边框样式 */
  border?: string;
  /** 边框宽度 */
  borderWidth?: string | number;
  /** 边框颜色 */
  borderColor?: string;
  /** 边框样式（solid, dashed等） */
  borderStyle?: string;
  /** 内边距 */
  padding?: string | number;
  /** 圆角 */
  borderRadius?: string | number;
  /** 图标（可以是ReactNode或组件） */
  icon?: ReactNode;
  /** 图标大小 */
  iconSize?: string | number;
  /** 图标颜色 */
  iconColor?: string;
}
/**
 * PisellPaymentList 组件属性
 */
interface PisellPaymentListProps {
  /** 金额符号 */
  amountSymbol?: string;
  /** 支付方式列表（每一项可以包含自己的 itemConfig 配置） */
  paymentMethods?: ExtendedPaymentMethod[];
  /** 自定义金额 */
  customAmount?: string | number;
  /** 当前选中的支付方式ID（用于单选模式） */
  selectedId?: string;
  /** 选择回调 */
  onSelect?: (method: ExtendedPaymentMethod) => void;
  /** 编辑按钮点击回调 */
  onEdit?: (method: ExtendedPaymentMethod) => void;
  /** 是否禁用 */
  disabled?: boolean;
  /** 是否显示现金支付 */
  showCashPayment?: boolean;
  /** 是否启用单选模式（默认false，开启时每一项的style设置为radio） */
  isRadioMode?: boolean;
  /** 自定义类名 */
  className?: string;
  /** 自定义样式 */
  style?: CSSProperties;
  /** 自定义列数 */
  columnCount?: number | 'auto';
  /** 最大高度 */
  maxHeight?: number;
  /** 行间距 */
  rowGap?: number;
  /** 列间距 */
  columnGap?: number;
  /** 是否显示滚动条 */
  showScrollbar?: boolean;
  /** 每列最小宽度（当columnCount为'auto'时生效） */
  minColumnWidth?: number;
  /** 滚动事件回调 */
  onScroll?: (event: React.UIEvent<HTMLDivElement>) => void;
  /** 是否需要滚动状态改变回调 */
  onScrollableChange?: (isScrollable: boolean) => void;
  /** 滚动按钮样式配置（包含是否显示、高度、背景色、图标等） */
  scrollButtonStyle?: PisellPaymentListScrollButtonStyle;
  /** 滚动容器样式配置（背景色、边框、圆角、内边距等） */
  containerStyle?: PisellPaymentListContainerStyle;
  /** 插槽配置 */
  slots?: PisellPaymentListSlots;
  /** Item 统一配置（应用到所有 Item，作为默认配置。每个 paymentMethod 中的 itemConfig 优先级更高） */
  itemConfig?: PisellPaymentListItemFullConfig;
  /** 子组件（用于低代码编辑器中嵌套 PaymentListItem） */
  children?: ReactNode;
}
//#endregion
export { ExtendedPaymentMethod, PaymentMethodType, PisellPaymentListContainerStyle, PisellPaymentListItemActionConfig, PisellPaymentListItemArrowStyle, PisellPaymentListItemButtonStyle, PisellPaymentListItemContainerStyle, PisellPaymentListItemFullConfig, PisellPaymentListItemProps, PisellPaymentListItemSurchargeConfig, PisellPaymentListItemTitleStyle, PisellPaymentListProps, PisellPaymentListSlots };