/**
 * Google Workspace Admin Node - Version 1
 * Discriminator: resource=user, operation=getAll
 */


interface Credentials {
  gSuiteAdminOAuth2Api: CredentialReference;
}

/** Get many ChromeOS devices */
export type GSuiteAdminV1UserGetAllParams = {
  resource: 'user';
  operation: 'getAll';
/**
 * Whether to return all results or only up to a given limit
 * @default false
 */
    returnAll?: boolean | Expression<boolean>;
/**
 * Max number of results to return
 * @displayOptions.show { returnAll: [false] }
 * @default 100
 */
    limit?: number | Expression<number>;
/**
 * Output
 * @default simplified
 */
    output?: 'simplified' | 'raw' | 'select' | Expression<string>;
/**
 * Fields to include in the response when "Select Included Fields" is chosen
 * @displayOptions.show { output: ["select"] }
 * @default []
 */
    fields?: Array<'creationTime' | 'isAdmin' | 'kind' | 'lastLoginTime' | 'name' | 'primaryEmail' | 'suspended'>;
/**
 * What subset of fields to fetch for this user
 * @default basic
 */
    projection?: 'basic' | 'custom' | 'full' | Expression<string>;
/**
 * A comma-separated list of schema names. All fields from these schemas are fetched. Choose from the list, or specify IDs using an &lt;a href="https://docs.n8n.io/code/expressions/"&gt;expression&lt;/a&gt;.
 * @displayOptions.show { /projection: ["custom"] }
 * @default []
 */
    customFieldMask?: string[];
/**
 * Filter
 * @default {}
 */
    filter?: {
    /** The unique ID for the customer's Google Workspace account
     */
    customer?: string | Expression<string> | PlaceholderValue;
    /** The domain name. Use this field to get groups from a specific domain.
     */
    domain?: string | Expression<string> | PlaceholderValue;
    /** Query string to filter the results. Follow Google Admin SDK documentation. &lt;a href="https://developers.google.com/admin-sdk/directory/v1/guides/search-users#examples" target="_blank"&gt;More info&lt;/a&gt;.
     */
    query?: string | Expression<string> | PlaceholderValue;
    /** Whether retrieve the list of deleted users
     * @default false
     */
    showDeleted?: boolean | Expression<boolean>;
  };
/**
 * Define sorting rules for the results
 * @default {}
 */
    sort?: {
        /** Sort Rules
     */
    sortRules?: {
      /** Field to sort the results by
       */
      orderBy?: 'email' | 'familyName' | 'givenName' | Expression<string>;
      /** Sort order direction
       * @default ASCENDING
       */
      sortOrder?: 'ASCENDING' | 'DESCENDING' | Expression<string>;
    };
  };
};

export type GSuiteAdminV1UserGetAllOutput = {
  agreedToTerms?: boolean;
  archived?: boolean;
  changePasswordAtNextLogin?: boolean;
  creationTime?: string;
  customerId?: string;
  emails?: Array<{
    address?: string;
    primary?: boolean;
  }>;
  etag?: string;
  id?: string;
  includeInGlobalAddressList?: boolean;
  ipWhitelisted?: boolean;
  isAdmin?: boolean;
  isDelegatedAdmin?: boolean;
  isEnforcedIn2Sv?: boolean;
  isEnrolledIn2Sv?: boolean;
  isMailboxSetup?: boolean;
  kind?: string;
  languages?: Array<{
    languageCode?: string;
    preference?: string;
  }>;
  lastLoginTime?: string;
  name?: {
    familyName?: string;
    fullName?: string;
    givenName?: string;
  };
  orgUnitPath?: string;
  primaryEmail?: string;
  suspended?: boolean;
};

export type GSuiteAdminV1UserGetAllNode = {
  type: 'n8n-nodes-base.gSuiteAdmin';
  version: 1;
  credentials?: Credentials;
  config: NodeConfig<GSuiteAdminV1UserGetAllParams>;
  output?: Items<GSuiteAdminV1UserGetAllOutput>;
};