import { type AxiosResponse } from "axios";
export interface ApiClientConfig {
    baseURL?: string;
    timeout?: number;
    headers?: Record<string, string>;
}
type TokenProvider = () => string | undefined;
interface FileResponse {
    data: Blob;
    headers: AxiosResponse["headers"];
}
interface GetRequestOptions {
    url: string;
    params?: Record<string, unknown>;
    headers?: Record<string, string>;
}
interface PostRequestOptions {
    url: string;
    body?: unknown;
    headers?: Record<string, string>;
}
interface PutRequestOptions {
    url: string;
    body?: unknown;
    headers?: Record<string, string>;
}
interface DeleteRequestOptions {
    url: string;
    headers?: Record<string, string>;
}
interface FileRequestOptions {
    url: string;
    headers?: Record<string, string>;
}
interface UploadFileOptions {
    url: string;
    files: FileList | File[];
    headers?: {
        paramName?: string;
        [key: string]: unknown;
    };
}
declare class ApiClientService {
    private instance;
    private tokenProvider?;
    constructor(config?: ApiClientConfig);
    private setupInterceptors;
    /**
     * Establece el proveedor de token que se usará en todas las peticiones
     * @param provider Función que retorna el token de autorización
     */
    setTokenProvider(provider: TokenProvider | undefined): void;
    /**
     * Limpia el proveedor de token
     */
    clearTokenProvider(): void;
    /**
     * Actualiza la configuración por defecto del cliente
     */
    updateDefaults(config: ApiClientConfig): void;
    private axiosRequest;
    /**
     * Realiza una petición GET
     */
    get<T = unknown>(options: GetRequestOptions): Promise<T>;
    /**
     * Realiza una petición POST
     */
    post<T = unknown>(options: PostRequestOptions): Promise<T>;
    /**
     * Realiza una petición PUT
     */
    put<T = unknown>(options: PutRequestOptions): Promise<T>;
    /**
     * Realiza una petición DELETE
     */
    del<T = unknown>(options: DeleteRequestOptions): Promise<T>;
    /**
     * Obtiene un archivo como Blob
     */
    getFile(options: FileRequestOptions): Promise<FileResponse>;
    /**
     * Obtiene un archivo y retorna su URL como objeto
     */
    getFileAsUrl(options: FileRequestOptions): Promise<string>;
    /**
     * Abre un archivo en una nueva ventana
     */
    openFile(options: FileRequestOptions): Promise<void>;
    /**
     * Descarga un archivo
     */
    downloadFile(options: FileRequestOptions): Promise<void>;
    /**
     * Sube uno o más archivos usando FormData
     */
    uploadFile<T = unknown>(options: UploadFileOptions): Promise<T>;
}
/**
 * Cliente de API compartido con todas las funciones de HTTP
 */
export declare const apiClient: ApiClientService;
/**
 * Crea una nueva instancia del cliente de API
 */
export declare const createApiClient: (config?: ApiClientConfig) => ApiClientService;
/**
 * Establece el proveedor de token global para el cliente compartido
 */
export declare const setApiClientTokenProvider: (provider: TokenProvider | undefined) => void;
/**
 * Limpia el proveedor de token global
 */
export declare const clearApiClientTokenProvider: () => void;
export {};
//# sourceMappingURL=apiClient.d.ts.map