/**
 * Representa um endereço postal brasileiro retornado pela API ViaCEP.
 * @hideconstructor
 */
declare class Address {
    /** Código de Endereçamento Postal. */
    private _cep;
    /** Nome do logradouro (rua, avenida, etc.). */
    private _logradouro;
    /** Complemento do endereço (apto, bloco, etc.). */
    private _complemento;
    /** Unidade do logradouro, quando aplicável. */
    private _unidade;
    /** Nome do bairro. */
    private _bairro;
    /** Nome do município. */
    private _localidade;
    /** Sigla da unidade federativa (estado). */
    private _uf;
    /** Nome completo do estado. */
    private _estado;
    /** Nome da macrorregião geográfica do Brasil. */
    private _regiao;
    /** Código IBGE do município. */
    private _ibge;
    /** Código GIA — Gerência de Informação Apurada (somente municípios de SP). */
    private _gia;
    /** Código DDD da área de telefonia. */
    private _ddd;
    /** Código SIAFI do município. */
    private _siafi;
    protected constructor(cep: string, logradouro: string, complemento: string, unidade: string, bairro: string, localidade: string, uf: string, estado: string, regiao: string, ibge: string, gia: string, ddd: string, siafi: string);
    /** Código de Endereçamento Postal (CEP). */
    get cep(): string;
    /** Nome do logradouro (rua, avenida, travessa, etc.). */
    get logradouro(): string;
    /** Complemento do endereço (apartamento, bloco, etc.). */
    get complemento(): string;
    /** Unidade do logradouro, quando disponível. */
    get unidade(): string;
    /** Nome do bairro. */
    get bairro(): string;
    /** Nome do município. */
    get localidade(): string;
    /** Sigla da unidade federativa (estado). */
    get uf(): string;
    /** Nome completo do estado. */
    get estado(): string;
    /** Nome da macrorregião geográfica do Brasil (Norte, Nordeste, etc.). */
    get regiao(): string;
    /** Código IBGE do município. */
    get ibge(): string;
    /** Código GIA — Gerência de Informação Apurada (somente municípios de SP). */
    get gia(): string;
    /** Código DDD da área de telefonia. */
    get ddd(): string;
    /** Código SIAFI do município. */
    get siafi(): string;
    /**
     * Cria uma instância de Address a partir de um objeto bruto retornado pela API ViaCEP.
     * @param raw Objeto JSON retornado pela API
     * @returns Instância de Address com os campos mapeados
     */
    static from(raw: Record<string, string>): Address;
}

/**
 * Controlador de endereços postais brasileiros via ViaCEP.
 */
declare abstract class AddressController {
    private static readonly service;
    /**
     * Consulta um endereço pelo CEP informado.
     * @param cep CEP contendo 8 dígitos numéricos (com ou sem hífen)
     * @returns Endereço correspondente ao CEP
     * @throws {Error} Quando o CEP não é encontrado ou a API retorna erro
     */
    static findByCep(cep: string): Promise<Address>;
}

/**
 * Representa um banco brasileiro registrado no Sistema de Pagamentos Brasileiro (SPB).
 * @hideconstructor
 */
declare class Bank {
    /** Código ISPB — Identificador de Sistema de Pagamentos Brasileiro. */
    private _ispb;
    /** Nome reduzido do banco. */
    private _name;
    /** Código COMPE — Sistema de Compensação de Cheques e Outros Papéis. */
    private _code;
    /** Nome completo do banco. */
    private _fullName;
    protected constructor(ispb: string, name: string, code: number, fullName: string);
    /** Código ISPB — Identificador de Sistema de Pagamentos Brasileiro. */
    get ispb(): string;
    /** Nome reduzido do banco. */
    get name(): string;
    /** Código COMPE do banco. */
    get code(): number;
    /** Nome completo do banco. */
    get fullName(): string;
    /**
     * Cria uma instância de Bank a partir de um objeto bruto retornado pela API.
     * @param raw Objeto com os campos ispb, name, code e fullName
     * @returns Instância de Bank com os campos mapeados
     */
    static from(raw: {
        ispb: string;
        name: string;
        code: number;
        fullName: string;
    }): Bank;
    /**
     * Retorna uma representação JSON do banco como string formatada.
     * @returns String com os campos ispb, name, code e fullName
     */
    toString(): string;
}

/**
 * Controlador de bancos brasileiros via BrasilAPI.
 */
declare abstract class BankController {
    private static readonly service;
    /**
     * Retorna a lista de todos os bancos disponíveis.
     * @returns Lista de bancos com ISPB, código COMPE e nome
     * @example
     * ## Uso
     * ```javascript
     * const banks = await BankController.list()
     * for (const bank of banks) {
     *  console.log(bank.toString());
     * }
     * ```
     */
    static list(): Promise<Bank[]>;
    /**
     * Busca bancos cujo nome completo contenha o texto informado.
     * @param query Texto parcial do nome do banco (insensível a maiúsculas)
     * @returns Lista de bancos correspondentes
     */
    static findByFullName(query: string): Promise<Bank[]>;
    /**
     * Filtra bancos pelo código COMPE numérico ou por nome completo (texto parcial).
     * @param query Código numérico ou texto parcial do nome do banco
     * @returns Lista de bancos correspondentes
     */
    static filterByCodeOrFullName(query: string): Promise<Bank[]>;
}

/**
 * Opções de configuração para renderização de template DOCX.
 */
interface DocxRendererOptions {
    /**
     * Função chamada para tags sem valor correspondente nos dados.
     * Retorna a string a inserir no documento. Por padrão retorna string vazia,
     * evitando erros em formulários com campos opcionais.
     */
    nullGetter?: (part: {
        value: string;
    }, scopeManager?: unknown) => string;
    /**
     * Parser personalizado para pré-processar valores antes da substituição.
     * Útil para transformar tipos como `Date` em strings formatadas ou booleanos em `"Sim"/"Não"`.
     * @example
     * // Formata datas automaticamente para pt-BR
     * parser: (tag) => ({
     *   get: (scope) => {
     *     const val = scope[tag]
     *     if (val instanceof Date) return val.toLocaleDateString('pt-BR')
     *     return val ?? ''
     *   }
     * })
     */
    parser?: (tag: string) => {
        get: (scope: Record<string, unknown>) => unknown;
    };
}
/**
 * Provider para renderização de documentos Word (.docx) a partir de templates.
 * Utiliza PizZip e Docxtemplater internamente. Não deve ser instanciada.
 * @example
 * const blob = DocxRenderer.render(templateBuffer, { nome: 'João', data: new Date() })
 */
declare abstract class DocxRenderer {
    /**
     * Renderiza um template DOCX substituindo as tags pelos valores fornecidos.
     * Tags sem valor correspondente retornam string vazia por padrão (via `nullGetter`).
     * Erros de renderização do Docxtemplater são propagados com detalhes de cada tag inválida.
     * @param template Template DOCX como `ArrayBuffer`. Para converter de `Blob`: `await blob.arrayBuffer()`.
     * @param data Objeto com os dados para substituição das tags no template.
     * @param options Opções adicionais de renderização (`nullGetter`, `parser`).
     * @returns `Blob` do documento Word renderizado no formato `.docx`.
     * @throws {Error} Se a renderização falhar ou o template for inválido.
     */
    static render(template: ArrayBuffer, data: Record<string, unknown>, options?: DocxRendererOptions): Blob;
}

/**
 * Representa um município brasileiro com suas subdivisões geográficas,
 * conforme retornado pela API de localidades do IBGE.
 * @hideconstructor
 */
declare class Municipality {
    /** Identificador do município (código IBGE). */
    readonly cityId: string;
    /** Nome do município. */
    readonly cityName: string;
    /** Identificador da microregião geográfica. */
    readonly microregionId: string;
    /** Nome da microregião geográfica. */
    readonly microregionName: string;
    /** Identificador da mesoregião geográfica. */
    readonly mesoregionId: string;
    /** Nome da mesoregião geográfica. */
    readonly mesoregionName: string;
    /** Identificador da região geográfica imediata. */
    readonly immediateRegionId: string;
    /** Nome da região geográfica imediata. */
    readonly immediateRegionName: string;
    /** Identificador da região geográfica intermediária. */
    readonly intermediateRegionId: string;
    /** Nome da região geográfica intermediária. */
    readonly intermediateRegionName: string;
    /** Identificador numérico da Unidade Federativa (estado). */
    readonly stateId: string;
    /** Sigla da Unidade Federativa (estado). */
    readonly stateAbbreviation: string;
    /** Nome completo da Unidade Federativa (estado). */
    readonly stateName: string;
    /** Identificador da macrorregião geográfica do Brasil. */
    readonly regionId: string;
    /** Sigla da macrorregião geográfica do Brasil. */
    readonly regionAbbreviation: string;
    /** Nome da macrorregião geográfica do Brasil. */
    readonly regionName: string;
    constructor(cityId: string, cityName: string, microregionId: string, microregionName: string, mesoregionId: string, mesoregionName: string, immediateRegionId: string, immediateRegionName: string, intermediateRegionId: string, intermediateRegionName: string, stateId: string, stateAbbreviation: string, stateName: string, regionId: string, regionAbbreviation: string, regionName: string);
}

/**
 * Controlador de municípios brasileiros via API de localidades do IBGE.
 */
declare abstract class MunicipalityController {
    private static readonly service;
    /**
     * Busca municípios cujo nome contenha o texto informado (insensível a acentos e maiúsculas).
     * @param name Nome ou parte do nome do município
     * @returns Lista de municípios correspondentes
     */
    static findByName(name: string): Promise<Municipality[]>;
}

export { Address, AddressController, Bank, BankController, DocxRenderer, Municipality, MunicipalityController };
export type { DocxRendererOptions };
