import { AxiosInstance } from 'axios';
import { Pageable } from '../index';
import Conditional, { ConditionalResource } from './conditional';
export interface LocatableLocationParameters {
    [key: string]: any;
    city?: string;
    country?: string;
    region?: string;
}
export interface LocationFilter {
    [key: string]: any;
    assigned?: boolean;
    invitable?: number;
    invite_only_resources?: boolean;
    preferred?: number;
    method?: number;
    services?: number | number[] | string | string[];
    resource?: string;
    user?: number | string;
    user_category?: number | string;
    virtual?: number;
}
export interface LocationParameters {
    assignments?: number;
    city?: string;
    client_view_meeting_method?: number;
    country?: string;
    invite_only?: number;
    invite_only_resources?: number;
    preferred?: number;
    province?: string;
    service?: number | number[] | string | string[];
    resource?: string;
    user?: number | string;
    user_category?: number | string;
    virtual?: number;
}
export interface LocationResource extends Pageable, ConditionalResource {
    assigned(assigned: boolean): this;
    containing(user: number | string): this;
    details(identifier: string): Promise<any>;
    invitable(): this;
    located(details: LocatableLocationParameters): this;
    preferred(): this;
    physical(): this;
    providing(services: number | number[] | string | string[]): this;
    suggest(query: string): Promise<any>;
    supporting(method: number): this;
    through(resource: string): this;
    virtual(): this;
    withInviteOnly(inviteOnlyResources?: boolean): this;
    withinUserCategory(userCategory: number | string): this;
}
export default class Location extends Conditional implements LocationResource {
    protected client: AxiosInstance;
    protected filters: LocationFilter;
    protected page: number | null;
    protected sortable: string | null;
    protected limit: number | null;
    constructor(client: AxiosInstance);
    assigned(assigned?: boolean): this;
    containing(user: number | string): this;
    details(identifier: string): Promise<any>;
    get(): Promise<any>;
    invitable(): this;
    located(details: LocatableLocationParameters): this;
    on(page: number): this;
    preferred(): this;
    physical(): this;
    providing(services: number | number[] | string | string[]): this;
    sortBy(sortable: string): this;
    suggest(query: string): Promise<any>;
    supporting(method: number): this;
    take(limit: number): this;
    through(resource: string): this;
    virtual(): this;
    withInviteOnly(inviteOnlyResources?: boolean): this;
    withinUserCategory(userCategory: number | string): this;
    protected params(): LocationParameters;
}
