import { ListQueryParams } from './listQueryParams.js';
/**
 * Interface representing a Nylas Contact object.
 */
export interface Contact {
    id: string;
    grantId: string;
    object: 'contact';
    birthday?: string;
    companyName?: string;
    displayName: string;
    emails: Email[];
    imAddresses: InstantMessagingAddress[];
    givenName?: string;
    jobTitle?: string;
    managerName?: string;
    middleName?: string;
    nickname?: string;
    notes?: string;
    officeLocation?: string;
    pictureUrl?: string;
    picture?: string;
    suffix?: string;
    surname?: string;
    source?: SourceType;
    phoneNumbers: PhoneNumber[];
    physicalAddresses: PhysicalAddress[];
    webPages: WebPage[];
    groups: ContactGroup[];
}
/**
 * Custom Types.
 */
export type SourceType = 'address_book' | 'inbox' | 'domain';
export type GroupType = 'user' | 'system' | 'other';
/**
 * Interface for email addresses in a contact.
 */
export interface Email {
    email?: string;
    type?: string;
}
/**
 * Interface for IM addresses in a contact.
 */
export interface InstantMessagingAddress {
    type?: string;
    imAddress?: string;
}
/**
 * Interface for phone numbers in a contact.
 */
export interface PhoneNumber {
    number?: string;
    type?: string;
}
/**
 * Interface for physical addresses in a contact.
 */
export interface PhysicalAddress {
    format?: string;
    streetAddress?: string;
    city?: string;
    postalCode?: string;
    state?: string;
    country?: string;
    type?: string;
}
/**
 * Interface for web pages in a contact.
 */
export interface WebPage {
    url?: string;
    type?: string;
}
/**
 * Interface representing a contact group.
 */
export interface ContactGroup {
    id: string;
    object: 'contact_group';
    grantId?: string;
    groupType?: GroupType;
    name?: string;
    path?: string;
}
/**
 * Interface representing the query parameters for listing contacts.
 */
export interface ListContactQueryParams extends ListQueryParams {
    /**
     * Returns the contacts matching the exact contact's email.
     */
    email?: string;
    /**
     * Returns the contacts matching the contact's exact phone number
     */
    phoneNumber?: string;
    /**
     * Returns the contacts matching from the address book or auto-generated contacts from emails.
     * For example of contacts only from the address book: /contacts?source=address_bookor for only autogenerated contacts:/contacts?source=inbox`
     */
    source?: string;
    /**
     * Returns the contacts belonging to the Contact Group matching this ID
     */
    group?: string;
    /**
     * When set to true, returns the contacts also within the specified Contact Group subgroups, if the group parameter is set.
     */
    recurse?: boolean;
}
/**
 * Interface representing the query parameters for retrieving a single contact.
 */
export interface FindContactQueryParams {
    profilePicture?: boolean;
}
/**
 * Interface for creating a contact.
 */
export type CreateContactRequest = {
    displayName?: string;
    birthday?: string;
    companyName?: string;
    emails?: Email[];
    givenName?: string;
    imAddresses?: InstantMessagingAddress[];
    jobTitle?: string;
    managerName?: string;
    middleName?: string;
    nickname?: string;
    notes?: string;
    officeLocation?: string;
    phoneNumbers?: PhoneNumber[];
    physicalAddresses?: PhysicalAddress[];
    suffix?: string;
    surname?: string;
    webPages?: WebPage[];
    picture?: string;
    source?: SourceType;
    groups?: ContactGroup[];
};
/**
 * Interface for updating a contact.
 */
export type UpdateContactRequest = CreateContactRequest;
