import { ElementRef } from '@angular/core';
import { FileDto } from '@seniorsistemas/angular-components/file-picker';
import { FieldConfig } from './field';
/**
 * Configuração para campo de upload de arquivos binários.
 *
 * Exibe uma área de upload com suporte a múltiplos arquivos, progresso de envio,
 * visualização de arquivos enviados e download.
 *
 * Todas as propriedades são obrigatórias, pois o componente depende de labels e handlers
 * para opções de ação e controle dos arquivos.
 */
export interface BlobFieldConfig extends FieldConfig {
    /** Tipo do campo: sempre `'blob'`. */
    type: 'blob';
    /**
     * Tipos de arquivo aceitos no seletor de arquivo nativo (MIME types ou extensões).
     * @example 'image/*' | '.pdf,.docx'
     */
    accept: string;
    /**
     * Lista dos arquivos atualmente associados ao campo.
     * Deve ser inicializada como array vazio `[]` ao criar o formulário.
     */
    files: FileDto[];
    /**
     * Rótulo do botão de escolher/adicionar arquivo.
     * @example 'Escolher arquivo'
     */
    chooseLabel: string;
    /**
     * Rótulo do botão de remover um arquivo da lista.
     * @example 'Remover'
     */
    removeLabel: string;
    /**
     * Rótulo do botão de cancelar o upload em andamento.
     * @example 'Cancelar'
     */
    cancelLabel: string;
    /**
     * Texto do tooltip exibido quando o upload é concluído com sucesso.
     * @example 'Upload concluído'
     */
    successTooltip: string;
    /**
     * Permite selecionar e enviar múltiplos arquivos simultaneamente.
     */
    multiple: boolean;
    /**
     * Callback chamado após o envio bem-sucedido de arquivos.
     * Recebe a lista de arquivos enviados e a instância da configuração do campo.
     */
    onUploadFile: (event: {
        files: FileDto[];
    }, field: BlobFieldConfig) => void;
    /**
     * Callback chamado quando o usuário remove um arquivo da lista.
     */
    onRemoveFile: (event: FileDto, field: BlobFieldConfig) => void;
    /**
     * Callback chamado quando o usuário cancela um upload em andamento.
     * O `event` é o índice do arquivo na fila de upload.
     */
    onCancelUpload: (event: number, field: BlobFieldConfig) => void;
    /**
     * Callback chamado quando o usuário clica para baixar um arquivo já enviado.
     * Recebe o índice do arquivo e a referência ao elemento anchor de download.
     */
    onDownloadFile: (event: {
        index: number;
        anchor: ElementRef;
    }, field: BlobFieldConfig) => void;
    /**
     * Quando `true`, exibe a data de upload de cada arquivo na lista.
     */
    showFileUploadDate: boolean;
}
declare module './field' {
    interface FieldTypeMap {
        blob: BlobFieldConfig;
    }
}
