/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
import { IExecuteFunctions, IHookFunctions, ILoadOptionsFunctions, IDataObject, IHttpRequestMethods, GenericValue, IN8nHttpResponse } from 'n8n-workflow';
import { ICompany, ICustomField, IOpportunity } from '../resources';
import { IContact } from '../resources/contact/contact.types';
import { THttpFullResponse } from '../types/httpRequest';
interface ContactSearchParams {
    locationId: string;
    page: number;
    pageLimit: number;
    searchAfter?: Array<string | number>;
    filters?: Array<{
        group?: 'AND' | 'OR';
        filters?: Array<{
            field: string;
            operator: string;
            value: any;
        }>;
        field?: string;
        operator?: string;
        value?: any;
    }>;
    sort?: Array<{
        field: string;
        direction: 'asc' | 'desc';
    }>;
}
declare type TBody = FormData | GenericValue | GenericValue[] | Buffer | URLSearchParams;
declare type TQueryString = IDataObject;
interface OpportunitySearchParams {
    assigned_to?: string;
    campaignId?: string;
    contact_id?: string;
    country?: string;
    date?: string;
    endDate?: string;
    getCalendarEvents?: boolean;
    getNotes?: boolean;
    getTasks?: boolean;
    id?: string;
    limit?: number;
    order?: string;
    page?: number;
    pipeline_id?: string;
    pipeline_stage_id?: string;
    q?: string;
    startAfter?: string;
    startAfterId?: string;
    status?: 'open' | 'won' | 'lost' | 'abandoned' | 'all';
    location_id?: string;
}
export declare class GoHighLevelManager {
    #private;
    static instance: GoHighLevelManager;
    private baseURL;
    private n8n;
    private locationId;
    constructor(n8n: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions, locationId: string);
    static getInstance(n8n: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions): Promise<GoHighLevelManager>;
    request<T extends IN8nHttpResponse>({ method, path, body, params }: {
        method: IHttpRequestMethods;
        path: string;
        body?: TBody;
        params?: TQueryString;
    }): Promise<T>;
    httpRequestWithAuthentication<T extends IN8nHttpResponse>({ method, path, body, params, verbose }: {
        method: IHttpRequestMethods;
        path: string;
        body?: TBody;
        params?: TQueryString;
        verbose?: boolean;
    }): Promise<THttpFullResponse<T>>;
    get<T extends IN8nHttpResponse>(path: string, options?: {
        params?: TQueryString;
        verbose?: boolean;
    }): Promise<T>;
    post<T extends IN8nHttpResponse>(path: string, options?: {
        body: TBody;
        verbose?: boolean;
    }): Promise<T>;
    put<T extends IN8nHttpResponse>(path: string, options?: {
        body: TBody;
        verbose?: boolean;
    }): Promise<T>;
    delete<T extends IN8nHttpResponse>(path: string, options?: {
        body: TBody;
        verbose?: boolean;
    }): Promise<T>;
    findContact(params: ContactSearchParams): Promise<IContact>;
    findContactByEmail(email: string): Promise<IContact>;
    createContact(contact: IContact): Promise<{
        customFields: {
            id: string;
            field_value: string;
            name: string | undefined;
        }[] | undefined;
        id?: string | undefined;
        email?: string | undefined;
        firstName?: string | undefined;
        lastName?: string | undefined;
        phone?: string | undefined;
        tags?: string[] | undefined;
    }>;
    getContacts(options?: {
        params?: TQueryString;
    }): Promise<{
        customFields: {
            id: string;
            field_value: string;
            name: string | undefined;
        }[] | undefined;
        id?: string | undefined;
        email?: string | undefined;
        firstName?: string | undefined;
        lastName?: string | undefined;
        phone?: string | undefined;
        tags?: string[] | undefined;
    }[]>;
    getContact(contactId: string): Promise<{
        customFields: {
            id: string;
            field_value: string;
            name: string | undefined;
        }[] | undefined;
        id?: string | undefined;
        email?: string | undefined;
        firstName?: string | undefined;
        lastName?: string | undefined;
        phone?: string | undefined;
        tags?: string[] | undefined;
    }>;
    updateContact(contactId: string, contact: IContact): Promise<{
        customFields: {
            id: string;
            field_value: string;
            name: string | undefined;
        }[] | undefined;
        id?: string | undefined;
        email?: string | undefined;
        firstName?: string | undefined;
        lastName?: string | undefined;
        phone?: string | undefined;
        tags?: string[] | undefined;
    }>;
    upsertContact(contact: IContact): Promise<{
        customFields: {
            id: string;
            field_value: string;
            name: string | undefined;
        }[] | undefined;
        id?: string | undefined;
        email?: string | undefined;
        firstName?: string | undefined;
        lastName?: string | undefined;
        phone?: string | undefined;
        tags?: string[] | undefined;
    }>;
    deleteContact(contactId: string): Promise<IContact>;
    addTagToContact(contactId: string, tags: string[]): Promise<IContact>;
    removeTagFromContact(contactId: string, tags: string[]): Promise<IContact>;
    findDuplicateContacts(contact: IContact): Promise<IContact[]>;
    createCompany(company: ICompany): Promise<ICompany>;
    getCompany(companyId: string): Promise<ICompany>;
    getCompanies(options?: {
        params?: TQueryString;
    }): Promise<ICompany[]>;
    updateCompany(companyId: string, company: ICompany): Promise<ICompany>;
    deleteCompany(companyId: string): Promise<ICompany>;
    addTagsToCompany(companyId: string, tags: string[]): Promise<ICompany>;
    removeTagsFromCompany(companyId: string, tags: string[]): Promise<ICompany>;
    findOpportunity(params: OpportunitySearchParams): Promise<{
        customFields: {
            id: string;
            fieldValue: string | object | string[] | object[];
            name: string | undefined;
        }[] | undefined;
        id?: string | undefined;
        name: string;
        value?: number | undefined;
        pipelineId?: string | undefined;
        pipelineStageId?: string | undefined;
        contactId?: string | undefined;
        companyId?: string | undefined;
        status?: string | undefined;
    }>;
    createOpportunity(opportunity: IOpportunity): Promise<{
        customFields: {
            id: string;
            fieldValue: string | object | string[] | object[];
            name: string | undefined;
        }[] | undefined;
        id?: string | undefined;
        name: string;
        value?: number | undefined;
        pipelineId?: string | undefined;
        pipelineStageId?: string | undefined;
        contactId?: string | undefined;
        companyId?: string | undefined;
        status?: string | undefined;
    }>;
    getOpportunity(opportunityId: string): Promise<{
        customFields: {
            id: string;
            fieldValue: string | object | string[] | object[];
            name: string | undefined;
        }[] | undefined;
        id?: string | undefined;
        name: string;
        value?: number | undefined;
        pipelineId?: string | undefined;
        pipelineStageId?: string | undefined;
        contactId?: string | undefined;
        companyId?: string | undefined;
        status?: string | undefined;
    }>;
    getOpportunities(options?: {
        params?: TQueryString;
    }): Promise<{
        customFields: {
            id: string;
            fieldValue: string | object | string[] | object[];
            name: string | undefined;
        }[] | undefined;
        id?: string | undefined;
        name: string;
        value?: number | undefined;
        pipelineId?: string | undefined;
        pipelineStageId?: string | undefined;
        contactId?: string | undefined;
        companyId?: string | undefined;
        status?: string | undefined;
    }[]>;
    updateOpportunity(opportunityId: string, opportunity: Partial<IOpportunity>): Promise<{
        customFields: {
            id: string;
            fieldValue: string | object | string[] | object[];
            name: string | undefined;
        }[] | undefined;
        id?: string | undefined;
        name: string;
        value?: number | undefined;
        pipelineId?: string | undefined;
        pipelineStageId?: string | undefined;
        contactId?: string | undefined;
        companyId?: string | undefined;
        status?: string | undefined;
    }>;
    deleteOpportunity(opportunityId: string): Promise<IOpportunity>;
    updateOpportunityStage(opportunityId: string, stageId: string): Promise<IOpportunity>;
    updateOpportunityStatus(opportunityId: string, status: string): Promise<IOpportunity>;
    getCustomFields(model?: 'contact' | 'opportunity' | 'all'): Promise<ICustomField[]>;
    createCustomField(model: 'contact' | 'opportunity' | 'company', customField: ICustomField): Promise<ICustomField>;
    getCustomField(customFieldId: string): Promise<ICustomField>;
    updateCustomField(customFieldId: string, customField: Partial<ICustomField>): Promise<ICustomField>;
    deleteCustomField(customFieldId: string): Promise<ICustomField>;
}
export {};
