import { WordPressClient } from '../utils/WordPressClient';
import { ITaxonomyQueryOptions, ITaxonomyCreateData, IWordPressTaxonomy } from '../interfaces/WordPressInterfaces';
/**
 * Tipo de taxonomia
 */
export type TaxonomyType = 'category' | 'post_tag';
/**
 * Serviço para gerenciamento de taxonomias do WordPress (categorias e tags)
 */
export declare class TaxonomyService {
    private client;
    private taxonomyEndpoints;
    /**
     * Construtor do serviço
     * @param client Cliente WordPress
     */
    constructor(client: WordPressClient);
    /**
     * Obtém o endpoint para o tipo de taxonomia
     * @param type Tipo de taxonomia
     * @returns Endpoint da taxonomia
     */
    private getTaxonomyEndpoint;
    /**
     * Converte opções de consulta para parâmetros de requisição
     * @param options Opções de consulta
     * @returns Parâmetros da requisição
     */
    private getQueryParams;
    /**
     * Verifica se uma taxonomia existe, considerando hierarquia
     * @param type Tipo de taxonomia
     * @param nameOrId Nome ou ID da taxonomia
     * @param parentId ID do pai (opcional) para categorias hierárquicas
     * @returns A taxonomia encontrada ou null
     */
    checkExists(type: TaxonomyType, nameOrId: string | number, parentId?: number): Promise<IWordPressTaxonomy | null>;
    /**
     * Obtém uma categoria por ID ou nome
     * @param idOrName ID ou nome da categoria
     * @returns Categoria encontrada ou null
     */
    getCategory(idOrName: number | string): Promise<IWordPressTaxonomy | null>;
    /**
     * Obtém uma tag por ID ou nome
     * @param idOrName ID ou nome da tag
     * @returns Tag encontrada ou null
     */
    getTag(idOrName: number | string): Promise<IWordPressTaxonomy | null>;
    /**
     * Obtém categorias com base em opções de filtro
     * @param options Opções de consulta
     * @returns Lista de categorias
     */
    getCategories(options?: ITaxonomyQueryOptions): Promise<IWordPressTaxonomy[]>;
    /**
     * Obtém tags com base em opções de filtro
     * @param options Opções de consulta
     * @returns Lista de tags
     */
    getTags(options?: ITaxonomyQueryOptions): Promise<IWordPressTaxonomy[]>;
    /**
     * Obtém hierarquia de categorias
     * @param options Opções de consulta
     * @returns Lista de categorias com hierarquia
     */
    getCategoryHierarchy(options?: ITaxonomyQueryOptions): Promise<IWordPressTaxonomy[]>;
    /**
     * Cria uma categoria
     * @param data Dados da categoria
     * @returns Categoria criada
     */
    createCategory(data: ITaxonomyCreateData): Promise<IWordPressTaxonomy>;
    /**
     * Cria uma tag
     * @param data Dados da tag
     * @returns Tag criada
     */
    createTag(data: ITaxonomyCreateData): Promise<IWordPressTaxonomy>;
    /**
     * Atualiza uma categoria
     * @param id ID da categoria
     * @param data Dados atualizados
     * @returns Categoria atualizada
     */
    updateCategory(id: number, data: Partial<ITaxonomyCreateData>): Promise<IWordPressTaxonomy>;
    /**
     * Atualiza uma tag
     * @param id ID da tag
     * @param data Dados atualizados
     * @returns Tag atualizada
     */
    updateTag(id: number, data: Partial<ITaxonomyCreateData>): Promise<IWordPressTaxonomy>;
    /**
     * Exclui uma categoria
     * @param id ID da categoria
     * @returns true se excluída com sucesso
     */
    deleteCategory(id: number): Promise<boolean>;
    /**
     * Exclui uma tag
     * @param id ID da tag
     * @returns true se excluída com sucesso
     */
    deleteTag(id: number): Promise<boolean>;
    /**
     * Garante que uma categoria existe (cria se não existir)
     * @param name Nome da categoria
     * @param parent ID da categoria pai (opcional)
     * @returns Categoria existente ou nova
     */
    ensureCategory(name: string, parent?: number): Promise<IWordPressTaxonomy>;
    /**
     * Garante que uma tag existe (cria se não existir)
     * @param name Nome da tag
     * @returns Tag existente ou nova
     */
    ensureTag(name: string): Promise<IWordPressTaxonomy>;
    /**
     * Garante que múltiplas categorias existam
     * @param names Nomes das categorias
     * @returns Categorias existentes ou novas
     */
    ensureCategories(names: string[]): Promise<IWordPressTaxonomy[]>;
    /**
     * Garante que múltiplas tags existam
     * @param names Nomes das tags
     * @returns Tags existentes ou novas
     */
    ensureTags(names: string[]): Promise<IWordPressTaxonomy[]>;
    /**
     * Gera um slug a partir do nome da taxonomia
     * @param name Nome da taxonomia
     * @returns Slug gerado
     */
    generateSlug(name: string): string;
    /**
     * Associa categorias e tags a um post
     * @param postId ID do post
     * @param categories Nomes ou slugs das categorias
     * @param tags Nomes ou slugs das tags
     * @returns Post atualizado
     */
    associateTaxonomiesWithPost(postId: number, categories?: (string | number)[], tags?: (string | number)[]): Promise<any>;
    /**
     * Associa categorias e tags a uma página
     * @param pageId ID da página
     * @param categories Nomes ou slugs das categorias
     * @param tags Nomes ou slugs das tags
     * @returns Página atualizada
     */
    associateTaxonomiesWithPage(pageId: number, categories?: (string | number)[], tags?: (string | number)[]): Promise<any>;
    /**
     * Obtém subcategorias de uma categoria específica
     * @param parentId ID da categoria pai
     * @param options Opções de consulta
     * @returns Lista de subcategorias
     */
    getSubcategories(parentId: number, options?: ITaxonomyQueryOptions): Promise<IWordPressTaxonomy[]>;
    /**
     * Obtém o caminho completo da hierarquia de uma categoria
     * @param categoryId ID da categoria
     * @returns Lista de categorias do topo até a categoria especificada
     */
    getCategoryPath(categoryId: number): Promise<IWordPressTaxonomy[]>;
    /**
     * Obtém todas as categorias e organiza em uma estrutura hierárquica de árvore
     * @param options Opções de consulta
     * @returns Árvore de categorias
     */
    getCategoryTree(options?: ITaxonomyQueryOptions): Promise<Record<string, any>>;
    /**
     * Obtém estatísticas sobre taxonomias
     * @returns Estatísticas de taxonomias
     */
    getTaxonomyStats(): Promise<Record<string, any>>;
}
