/**
 * Componente responsável pela criação, edição e gerenciamento de filtros personalizados.
 *
 * Permite alternar entre os modos assistente e avançado, salvar, cancelar e manipular filtros.
 *
 * @component
 * @example
 * <snk-personalized-filter
 *    entityUri="sua/entidade"
 *    filterId="idFiltro"
 *    configName="nomeConfig"
 *    resourceID="resourceId"
 *    isDefaultFilter={false}
 *    messagesBuilder={messagesBuilderInstance}
 *    onEzSave={handler}
 *    onEzCancel={handler}
 * />
 */
import { EventEmitter } from '../../stencil-public-runtime';
import { IFilterLink, IFilterField, FilterFieldsDataSource } from "../snk-filter-field-search/interfaces";
import { SnkMessageBuilder } from '../../lib/message/SnkMessageBuilder';
import { IPersonalizedFilter } from './interfaces/IPersonalizedFilter';
export declare class SnkPersonalizedFilter {
  private readonly _personalizedFilterFetcher;
  private _application;
  private _originalFilterAssistent;
  private _elButtonSave;
  private _filterMetadataStorage;
  private _viewStackRef;
  private _elAdvancedMode;
  private _elFilterFieldSearch;
  private _elButtonMode;
  private _filterAssistentMode;
  private _filterAssistent;
  /**
   * Responsável por flexibilizar e padronizar o uso de mensagens nos blocos de construção.
   * @property
   */
  messagesBuilder: SnkMessageBuilder;
  /**
   * URI da entidade utilizada para buscar os campos disponíveis para filtro.
   * @property
   */
  entityUri: string;
  /**
   * Identificador do filtro a ser carregado.
   * @property
   */
  filterId: string;
  /**
   * Nome da configuração, utilizado para distinguir múltiplas instâncias do componente.
   * @property
   */
  configName: string;
  /**
   * Identificador do recurso utilizado para salvar e recuperar filtros.
   * @property
   */
  resourceID: string;
  /**
   * Indica se o filtro é o filtro padrão do sistema.
   * @property
   * @default false
   */
  isDefaultFilter: boolean;
  /**
   * Evento emitido ao cancelar a personalização do filtro.
   * @event
   */
  ezCancel: EventEmitter<void>;
  /**
   * Evento emitido ao salvar as alterações do filtro personalizado.
   * @event
   */
  ezSave: EventEmitter<string>;
  /**
   * Evento emitido após salvar as alterações do filtro personalizado.
   * @event
   */
  ezAfterSave: EventEmitter<void>;
  /**
   * Cria um novo filtro personalizado caso não exista nenhum.
   * @method
   * @returns {Promise<void>}
   */
  createPersonalizedFilter(): Promise<void>;
  /**
   * Carrega o filtro personalizado com base no identificador informado.
   * @watch filterId
   * @param newValue Novo valor do filtroId.
   * @param oldValue Valor anterior do filtroId.
   */
  loadFilter(newValue: string, oldValue: string): void;
  _dataSourceFetcher: FilterFieldsDataSource;
  componentWillLoad(): void;
  componentDidRender(): void;
  buildDataDefaultFilter(data: IPersonalizedFilter): void;
  getMessage(key: string, params?: any): string;
  saveFilter(): Promise<void>;
  removeFilter(): void;
  hasChangesToSave(): boolean;
  handleSave(): Promise<boolean>;
  saveAssistentMode(): void;
  saveAdvancedMode(): void;
  saveAndTransformToAdvancedMode(): void;
  validateExpressionBeforeSaving(): Promise<boolean>;
  handleCancel(): CustomEvent<void>;
  handleTitleChange(name: string): void;
  applyDefaultValues(personalizedFilter: IPersonalizedFilter): IPersonalizedFilter;
  addFilterGroupCondition(personalizedFilter: IPersonalizedFilter): void;
  addLabelToItems(personalizedFilter: IPersonalizedFilter): void;
  handleExpressionChangeAdvancedMode(expression: string): void;
  handleChangeFilterAssistentMode(filterAssistent: IPersonalizedFilter): void;
  selectField(fieldName: IFilterField | IFilterLink): void;
  private buildExpression;
  onAddField(target: any): void;
  renderButtonAddField(): any;
  buildContainerPersonalizedFilter(): any;
  handleModeChange(): void;
  buildTitle(): string;
  render(): any;
}
export interface IEntity {
  uri: string;
  description: string;
  type: string;
}
