/**
 * 🎯 Interface para configuração do componente RemoteSelect
 * 
 * Permite busca dinâmica e seleção de registros de qualquer domínio
 * via autocomplete ou modal (F2).
 */
export interface RemoteSelectConfig {
  /** Service que implementa DomainService<T> */
  service: any;
  
  /** Campo usado para filtrar na busca (ex: 'name') */
  searchField: string;
  
  /** Campo mostrado na interface (ex: 'name') */
  displayField: string;
  
  /** Campo do valor retornado (ex: 'id') */
  valueField: string;
  
  /** Label personalizado para filtros (substitui o header da coluna) */
  label?: string;
  
  /** Título do modal F2 (ex: 'Selecionar Motorista') */
  modalTitle?: string;
  
  /** Placeholder do input */
  placeholder?: string;
  
  /** Campos adicionais para busca simultânea */
  additionalFields?: string[];
  
  /** Número mínimo de caracteres para busca */
  minLength?: number;
  
  /** Tempo de debounce em ms */
  debounceTime?: number;
  
  /** Permitir seleção múltipla via modal */
  multiple?: boolean;
  
  /** Máximo de itens no dropdown */
  maxResults?: number;
  
  /** 🚀 OTIMIZAÇÃO: Valor inicial para evitar chamada ao backend */
  initialValue?: {
    id: any;
    label: string;
  };
  
  /** 🎯 DADOS INICIAIS: Para verificar se já temos o label */
  _initialData?: any;
  
  /** 🎯 CAMPO DE LABEL: Para buscar nos dados iniciais */
  _labelField?: string;
  
  /** 🎯 FILTROS: Filtros adicionais para a busca */
  filters?: { [key: string]: any };
}

/**
 * 🎯 Item retornado pela busca
 */
export interface RemoteSelectItem {
  /** Valor único do item */
  id: any;
  
  /** Texto exibido */
  label: string;
  
  /** Dados originais do item */
  data: any;
  
  /** Item está selecionado? */
  selected?: boolean;
}

/**
 * 🎯 Evento de seleção
 */
export interface RemoteSelectEvent {
  /** Item(s) selecionado(s) */
  value: any | any[];
  
  /** Item(s) completo(s) com dados */
  item: RemoteSelectItem | RemoteSelectItem[];
  
  /** Tipo de seleção */
  source: 'dropdown' | 'modal' | 'clear';
}

/**
 * 🎯 Estado do componente
 */
export interface RemoteSelectState {
  /** Está carregando? */
  loading: boolean;
  
  /** Dropdown está aberto? */
  dropdownOpen: boolean;
  
  /** Modal está aberto? */
  modalOpen: boolean;
  
  /** Termo de busca atual */
  searchTerm: string;
  
  /** Itens encontrados */
  items: RemoteSelectItem[];
  
  /** Item(s) selecionado(s) */
  selectedItems: RemoteSelectItem[];
  
  /** Mensagem de erro */
  error?: string;
} 