text: /**
   * Copyright (c) 2017-present, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the license found in the
   * LICENSE file in the root directory of this source tree.
   * @flow
   */
  import {AbstractCrudObject} from './../abstract-crud-object';
  import Cursor from './../cursor';
  import AdAccount from './ad-account';
  import BusinessAssetGroup from './business-asset-group';
  import Page from './page';
  import ProductCatalog from './product-catalog';
  
  /**
   * SystemUser
   * @extends AbstractCrudObject
   * @see {@link https://developers.facebook.com/docs/marketing-api/}
   */
  export default class SystemUser extends AbstractCrudObject {
    static get Fields (): Object {
      return Object.freeze({
        created_by: 'created_by',
        created_time: 'created_time',
        finance_permission: 'finance_permission',
        id: 'id',
        ip_permission: 'ip_permission',
        name: 'name',
      });
    }
  
    static get Role (): Object {
      return Object.freeze({
        admin: 'ADMIN',
        ads_rights_reviewer: 'ADS_RIGHTS_REVIEWER',
        default: 'DEFAULT',
        developer: 'DEVELOPER',
        employee: 'EMPLOYEE',
        finance_analyst: 'FINANCE_ANALYST',
        finance_edit: 'FINANCE_EDIT',
        finance_editor: 'FINANCE_EDITOR',
        finance_view: 'FINANCE_VIEW',
        manage: 'MANAGE',
        partner_center_admin: 'PARTNER_CENTER_ADMIN',
        partner_center_analyst: 'PARTNER_CENTER_ANALYST',
        partner_center_education: 'PARTNER_CENTER_EDUCATION',
        partner_center_marketing: 'PARTNER_CENTER_MARKETING',
        partner_center_operations: 'PARTNER_CENTER_OPERATIONS',
      });
    }
  
    getAssignedAdAccounts (fields: Array<string>, params: Object = {}, fetchFirstPage: boolean = true): Cursor | Promise<*> {
      return this.getEdge(
        AdAccount,
        fields,
        params,
        fetchFirstPage,
        '/assigned_ad_accounts'
      );
    }
  
    getAssignedBusinessAssetGroups (fields: Array<string>, params: Object = {}, fetchFirstPage: boolean = true): Cursor | Promise<*> {
      return this.getEdge(
        BusinessAssetGroup,
        fields,
        params,
        fetchFirstPage,
        '/assigned_business_asset_groups'
      );
    }
  
    getAssignedPages (fields: Array<string>, params: Object = {}, fetchFirstPage: boolean = true): Cursor | Promise<*> {
      return this.getEdge(
        Page,
        fields,
        params,
        fetchFirstPage,
        '/assigned_pages'
      );
    }
  
    getAssignedProductCatalogs (fields: Array<string>, params: Object = {}, fetchFirstPage: boolean = true): Cursor | Promise<*> {
      return this.getEdge(
        ProductCatalog,
        fields,
        params,
        fetchFirstPage,
        '/assigned_product_catalogs'
      );
    }
  
    
    get (fields: Array<string>, params: Object = {}): SystemUser {
      // $FlowFixMe : Support Generic Types
      return this.read(
        fields,
        params
      );
    }
  }
  