import { CrowdinApi, PaginationOptions, PatchRequest, ResponseList, ResponseObject } from '../core';
export declare class Fields extends CrowdinApi {
    /**
     * @param options optional parameters for the request
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.getMany
     */
    listFields(options?: FieldsModel.ListFieldsParams): Promise<ResponseList<FieldsModel.Field>>;
    /**
     * @param request request body
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.post
     */
    addField(request: FieldsModel.AddFieldRequest): Promise<ResponseObject<FieldsModel.Field>>;
    /**
     * @param fieldId field identifier
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.get
     */
    getField(fieldId: number): Promise<ResponseObject<FieldsModel.Field>>;
    /**
     * @param fieldId field identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.fields.delete
     */
    deleteField(fieldId: number): Promise<void>;
    /**
     * @param fieldId field identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.fields.patch
     */
    editField(fieldId: number, request: PatchRequest[]): Promise<ResponseObject<FieldsModel.Field>>;
}
export declare namespace FieldsModel {
    type Entity = 'project' | 'user' | 'task' | 'file' | 'translation' | 'string';
    type Type = 'checkbox' | 'radiobuttons' | 'date' | 'datetime' | 'number' | 'labels' | 'select' | 'multiselect' | 'text' | 'textarea' | 'url';
    type Place = 'projectCreateModal' | 'projectHeader' | 'projectDetails' | 'projectCrowdsourceDetails' | 'projectSettings' | 'projectTaskEditCreate' | 'projectTaskDetails' | 'projectTaskBoardCard' | 'fileDetails' | 'fileSettings' | 'userEditModal' | 'userDetails' | 'userPopover' | 'stringEditModal' | 'stringDetails' | 'translationUnderContent';
    interface Location {
        place: Place;
    }
    interface Option {
        label: string;
        value: string;
    }
    interface OtherFieldConfig {
        locations: Location[];
    }
    interface ListFieldConfig extends OtherFieldConfig {
        options: Option[];
    }
    interface NumberFieldConfig extends OtherFieldConfig {
        min: number;
        max: number;
        units: string;
    }
    type Config = ListFieldConfig | NumberFieldConfig | OtherFieldConfig;
    interface ListFieldsParams extends PaginationOptions {
        search?: string;
        entity?: Entity;
        type?: Type;
    }
    interface Field {
        id: number;
        name: string;
        slug: string;
        type: Type;
        description: string;
        entities: Entity[];
        config: Config;
        createdAt: string;
        updatedAt: string;
    }
    interface AddFieldRequest {
        name: string;
        slug: string;
        type: Type;
        description?: string;
        entities: Entity[];
        config?: Config;
    }
}
