import { BadgeComponent } from '@seniorsistemas/angular-components/badge';
import { FieldConfig } from './field';
type selectOptionFn = () => SelectOption[];
/**
 * Configuração para campo de seleção (dropdown/select).
 *
 * Exibe um dropdown com lista de opções estáticas ou dinâmicas.
 * Suporta seleção múltipla, filtro de pesquisa, opções editadas, grupos hierárquicos
 * e badges coloridos por opção.
 *
 * Para listas grandes com busca no servidor, prefira `type: 'autocomplete'` ou `type: 'lookup'`.
 */
export interface SelectFieldConfig extends FieldConfig {
    /** Tipo do campo: sempre `'enum'`. */
    type: 'enum';
    /**
     * Nome da propriedade do objeto de opção usada como label visível.
     * @default 'label'
     */
    optionLabel?: string;
    /**
     * Nome da propriedade do objeto de opção usada como valor armazenado.
     * @default 'value'
     */
    optionValue?: string;
    /**
     * Chave única identificadora de cada opção. Usada para rastrear seleção corretamente.
     * @example 'id'
     */
    dataKey?: string;
    /**
     * Quando `true`, a primeira opção da lista é selecionada automaticamente.
     */
    autoDisplayFirst?: boolean;
    /**
     * Lista de opções disponíveis. Pode ser um array estático ou uma função que retorna o array.
     * Cada opção pode ter `label`, `value`, `items` (subgrupo) e `badge`.
     * @example [{ label: 'Ativo', value: 'A' }, { label: 'Inativo', value: 'I' }]
     */
    options: selectOptionFn | SelectOption[];
    /**
     * Quando `true`, permite selecionar múltiplas opções.
     * O valor do campo será um array.
     */
    multiple?: boolean;
    /**
     * Label exibida no campo quando múltiplas opções forem selecionadas.
     * @example '{0} itens selecionados'
     */
    multipleSelectedLabel?: string;
    /** Callback chamado quando o usuário clica no dropdown. */
    onClick?: (event: any) => void;
    /** Callback chamado quando o valor selecionado muda. */
    onChange?: (event: any) => void;
    /**
     * Mensagem exibida quando a lista está vazia ou a pesquisa não retorna resultados.
     */
    emptyMessage?: string;
    /**
     * Quando `true`, o campo se torna um combobox editável, permitindo digitar um valor livre
     * além das opções da lista.
     */
    editable?: boolean;
    /**
     * Quando `true`, exibe um campo de pesquisa interno no dropdown para filtrar as opções.
     */
    filter?: boolean;
    /**
     * Quando `true`, agrupa as opções por categoria usando a propriedade `items` de cada opção.
     */
    group?: boolean;
    /**
     * Quando `true`, exibe um botão de limpar a seleção (X) no campo.
     */
    showClear?: boolean;
}
/**
 * Representa uma opção individual ou grupo de opções no campo `enum`.
 */
export type SelectOption = {
    /** Texto exibido na lista de opções. */
    label: string;
    /** Valor armazenado no modelo ao selecionar esta opção. */
    value?: any;
    /** Sub-opções para criar grupos hierárquicos (requer `group: true` na config). */
    items?: SelectOption[];
    /** Badge visual exibido ao lado da opção na lista. */
    badge?: Partial<Pick<BadgeComponent, 'type' | 'color' | 'iconClass' | 'iconPosition'>>;
};
declare module './field' {
    interface FieldTypeMap {
        enum: SelectFieldConfig;
    }
}
export {};
