import { S as StorageAdapter } from '../types-BaZccpvk.js';
import { R as RequestAdapter, a as RequestConfig } from '../types-CbTsi9CZ.js';

/**
 * API 通用类型定义
 * Common API Types
 */
/**
 * API 响应类型
 * Generic API Response Format
 */
interface ApiResponse<T = any> {
    success: boolean;
    data?: T;
    error?: string;
    message?: string;
    meta?: {
        pagination?: {
            page: number;
            limit: number;
            total: number;
            pages: number;
        };
        [key: string]: any;
    };
}
/**
 * 分页参数类型
 * Pagination Parameters
 */
interface PaginationParams {
    page?: number;
    limit?: number;
    search?: string;
    sortBy?: string;
    sortOrder?: 'asc' | 'desc';
}
/**
 * 认证响应类型（泛型）
 * Generic Auth Response
 */
interface AuthResponse<TUser = any> {
    user: TUser;
    token: string;
}
/**
 * 默认存储键常量
 * Default Storage Keys
 */
declare const DEFAULT_STORAGE_KEYS: {
    readonly AUTH_TOKEN: "auth_token";
    readonly USER_DATA: "user_data";
    readonly REFRESH_TOKEN: "refresh_token";
};
/**
 * 存储键类型（可扩展）
 * Storage Keys Type
 */
type StorageKeys = typeof DEFAULT_STORAGE_KEYS;
/**
 * API 路由配置
 * API Routes Configuration
 */
interface ApiRoutes {
    /** 认证相关路由 */
    auth?: {
        login?: string;
        logout?: string;
        register?: string;
        me?: string;
    };
    /** 用户相关路由 */
    users?: {
        list?: string;
        detail?: (id: string) => string;
        update?: (id: string) => string;
        delete?: (id: string) => string;
    };
    /** 自定义路由 */
    [key: string]: any;
}
/**
 * 默认 API 路由
 */
declare const DEFAULT_API_ROUTES: ApiRoutes;

/**
 * 基础 API 客户端（泛型）
 * Base API Client (Generic)
 *
 * 提供统一的 API 调用逻辑，通过适配器模式支持多平台
 * 使用泛型 TUser 支持不同项目的用户类型
 */

/**
 * 基础 API 客户端配置
 */
interface BaseApiClientConfig {
    /** 基础 URL */
    baseUrl: string;
    /** 存储适配器 */
    storage: StorageAdapter;
    /** 请求适配器 */
    request: RequestAdapter;
    /** 自定义存储键（可选） */
    storageKeys?: Partial<StorageKeys>;
    /** API 路由配置（可选） */
    routes?: ApiRoutes;
}
/**
 * 基础 API 客户端
 * @template TUser 用户类型（泛型）
 */
declare class BaseApiClient<TUser = any> {
    protected token: string | null;
    protected user: TUser | null;
    protected baseUrl: string;
    protected storage: StorageAdapter;
    protected request: RequestAdapter;
    protected storageKeys: StorageKeys;
    protected routes: ApiRoutes;
    constructor(config: BaseApiClientConfig);
    /**
     * 初始化 - 从存储中加载 token 和用户信息
     */
    init(): Promise<void>;
    /**
     * 设置认证 token
     */
    setToken(token: string | null): Promise<void>;
    /**
     * 设置用户信息
     */
    setUser(user: TUser | null): Promise<void>;
    /**
     * 获取当前 token
     */
    getToken(): string | null;
    /**
     * 获取当前用户
     */
    getUser(): TUser | null;
    /**
     * 检查是否已登录
     */
    isAuthenticated(): Promise<boolean>;
    /**
     * 清除用户数据
     */
    clearUserData(): Promise<void>;
    /**
     * 发送请求的通用方法
     */
    protected sendRequest<T = any>(config: RequestConfig): Promise<ApiResponse<T>>;
    /**
     * 发送 GET 请求
     */
    get<T = any>(url: string, params?: Record<string, any>): Promise<ApiResponse<T>>;
    /**
     * 发送 POST 请求
     */
    post<T = any>(url: string, body?: any): Promise<ApiResponse<T>>;
    /**
     * 发送 PUT 请求
     */
    put<T = any>(url: string, body?: any): Promise<ApiResponse<T>>;
    /**
     * 发送 PATCH 请求
     */
    patch<T = any>(url: string, body?: any): Promise<ApiResponse<T>>;
    /**
     * 发送 DELETE 请求
     */
    delete<T = any>(url: string): Promise<ApiResponse<T>>;
    /**
     * 用户注册
     * 默认实现，子类可重写以添加自定义逻辑
     */
    register(email: string, password: string, username: string): Promise<ApiResponse<AuthResponse<TUser>>>;
    /**
     * 用户登录
     * 默认实现，子类可重写以添加自定义逻辑
     */
    login(email: string, password: string): Promise<ApiResponse<AuthResponse<TUser>>>;
    /**
     * 用户退出登录
     * 默认实现，子类可重写以添加自定义逻辑
     */
    logout(): Promise<void>;
    /**
     * 获取当前用户信息
     * 默认实现，子类可重写以添加自定义逻辑
     */
    getCurrentUser(): Promise<ApiResponse<TUser>>;
    /**
     * 获取用户列表
     * 默认实现，子类可重写以添加自定义逻辑
     */
    getUsers(params?: {
        page?: number;
        limit?: number;
        search?: string;
    }): Promise<ApiResponse<{
        users: TUser[];
        total: number;
    }>>;
    /**
     * 获取用户详情
     * 默认实现，子类可重写以添加自定义逻辑
     */
    getUserById(userId: string): Promise<ApiResponse<TUser>>;
    /**
     * 更新用户信息
     * 默认实现，子类可重写以添加自定义逻辑
     */
    updateUser(userId: string, data: Partial<TUser>): Promise<ApiResponse<TUser>>;
    /**
     * 删除用户
     * 默认实现，子类可重写以添加自定义逻辑
     */
    deleteUser(userId: string): Promise<ApiResponse<void>>;
    /**
     * 请求前钩子（子类可重写）
     */
    protected onBeforeRequest?(config: RequestConfig): Promise<RequestConfig>;
    /**
     * 请求后钩子（子类可重写）
     */
    protected onAfterRequest?<T>(response: ApiResponse<T>): Promise<ApiResponse<T>>;
    /**
     * 请求错误钩子（子类可重写）
     */
    protected onRequestError?(error: Error): Promise<void>;
    /**
     * 认证成功钩子（子类可重写）
     */
    protected onAuthSuccess?(user: TUser, token: string): Promise<void>;
    /**
     * 认证失败钩子（子类可重写）
     */
    protected onAuthError?(error: string): Promise<void>;
    /**
     * 登出钩子（子类可重写）
     */
    protected onLogout?(): Promise<void>;
}

export { type ApiResponse, type ApiRoutes, type AuthResponse, BaseApiClient, type BaseApiClientConfig, DEFAULT_API_ROUTES, DEFAULT_STORAGE_KEYS, type PaginationParams, RequestAdapter, RequestConfig, StorageAdapter, type StorageKeys };
