import type { TableListConfig } from '@/components/TableList/types'

export interface SelectTableListProps {
  // 基础配置
  modelValue?: any // v-model绑定的值
  placeholder?: string // 输入框占位符
  title?: string // 弹窗标题
  width?: string // 弹窗宽度
  height?: string // 弹窗高度
  disabled?: boolean // 是否禁用
  readonly?: boolean // 是否只读
  
  // 选择配置
  multiple?: boolean // 是否多选
  labelKey?: string // 显示字段名
  valueKey?: string // 值字段名
  
  // 字段映射
  fieldMapping?: Record<string, string> // 字段映射关系
  
  // 表格配置
  tableConfig: TableListConfig // 表格配置
  
  // 显示值配置
  displayValue?: string // 显示的值
}

export interface SelectTableListEmits {
  (e: 'update:modelValue', value: any): void
  (e: 'update:displayValue', value: string): void
  (e: 'change', data: SelectionChangeData): void
  (e: 'clear', data: ClearData): void
  (e: 'selection-confirm', data: SelectionConfirmData): void
}

export interface SelectionChangeData {
  selectedRows: any[]
  selectedValues: any[]
  selectedLabels: string[]
  mode: 'single' | 'multiple'
}

export interface ClearData {
  field: string
  clearedFields: string[]
}

export interface SelectionConfirmData {
  selectedRows: any[]
  selectedValues: any[]
  selectedLabels: string[]
  mappedFields?: Record<string, any>
  mode: 'single' | 'multiple'
}

export interface PopupConfig {
  // 弹窗配置
  title: string
  width: string
  height: string
  multiple: boolean // 是否多选
  selection: {
    labelKey: string // 显示的标签字段
    valueKey: string // 保存的值字段
  }
  fieldMapping?: Record<string, string> // 字段映射：目标字段名 -> 源数据字段名
}