import * as axios from 'axios';

declare function useCometchatApi(config: CometchatApiConfig): {
    instance: axios.AxiosInstance;
    getUser: (uid: UserId) => Promise<GetUser | null>;
    createUser: (json: CreateUserReq) => Promise<CreateUserRes | null>;
    createToken: (uid: UserId, json?: CreateTokenReq) => Promise<CreateTokenRes | null>;
    getTokens: (uid: UserId) => Promise<TokenList | null>;
};

declare type UserId = string;
interface ICometchatApiError {
    error: {
        message: string;
        devMessage: string;
        source: string;
        details?: string;
        code: string;
    };
}
interface CometchatApiConfig {
    apiKey: string;
    appId: string;
    region: string;
}
interface TokenList {
    data: {
        uid: string;
        authToken: string;
        createdAt: number;
    }[];
    meta: {
        pagination: {
            total: number;
            count: number;
            per_page: number;
            current_page: number;
            total_pages: number;
        };
    };
}
interface CreateUserReq {
    uid: string;
    name: string;
    avatar?: string;
    link?: string;
    role?: string;
    metadata?: string;
    withAuthToken?: boolean;
    tags?: string[];
}
interface CreateUserRes {
    data: {
        uid: string;
        name: string;
        status: string;
        role?: string;
        createdAt: number;
        authToken?: string;
    };
}
interface CreateTokenReq {
    force?: boolean;
}
interface CreateTokenRes {
    data: {
        uid: string;
        authToken: string;
        createdAt: number;
    };
}
interface GetUser {
    data: {
        uid: string;
        name: string;
        avatar: string;
        status: string;
        role: string;
        createdAt: number;
    };
}

declare function isCometchatApiError(e: unknown): e is ICometchatApiError;

export { CometchatApiConfig, CreateTokenReq, CreateTokenRes, CreateUserReq, CreateUserRes, GetUser, ICometchatApiError, TokenList, UserId, isCometchatApiError, useCometchatApi };
