import {ModelDefinition} from './BaseModels';
import {Asset} from './Asset';
import {EventTrigger} from './EventTrigger';
import {Log} from './Log';
import {Manager} from './Manager';
import {Project} from './Project';
declare var Object: any;

export interface EventDashboardInterface {
  type: string;
  name: string;
  description?: string;
  created?: Date;
  modified?: Date;
  deleted?: Date;
  id?: any;
  assetIds?: Array<any>;
  projectId?: any;
  assets?: Asset[];
  eventDashboardEventTriggers?: any[];
  eventTriggers?: EventTrigger[];
  trackingLogs?: Log[];
  managers?: Manager[];
  project?: Project;
}

export class EventDashboard implements EventDashboardInterface {
  type: string = 'AUTO';
  name: string;
  description: string;
  created: Date;
  modified: Date;
  deleted: Date;
  id: any;
  assetIds: Array<any> = [];
  projectId: any;
  assets?: Asset[];
  eventDashboardEventTriggers?: any[];
  eventTriggers?: EventTrigger[];
  trackingLogs?: Log[];
  managers?: Manager[];
  project?: Project;
  constructor(data?: EventDashboardInterface) {
    Object.assign(this, data);
  }

  /**
   * The name of the model represented by this $resource,
   * i.e. `EventDashboard`.
   */
  public static getModelName(): string {
    return 'EventDashboard';
  }

  /**
   * @method factory
   * @author Jonathan Casarrubias
   * @license MIT
   * This method creates an instance of EventDashboard for dynamic purposes.
   */
  public static factory(data: EventDashboardInterface): EventDashboard{
    return new EventDashboard(data);
  }

  /**
   * @method getModelDefinition
   * @author Julien Ledun
   * @license MIT
   * This method returns an object that represents some of the model
   * definitions.
   */
  public static getModelDefinition(): ModelDefinition {
    return {
      name: 'EventDashboard',
      plural: 'EventDashboards',
      path: 'EventDashboards',
      idName: 'id',
      properties: {
        type: {
          name: 'type',
          type: 'string',
          default: 'AUTO'
        },
        name: {
          name: 'name',
          type: 'string'
        },
        description: {
          name: 'description',
          type: 'string'
        },
        created: {
          name: 'created',
          type: 'Date'
        },
        modified: {
          name: 'modified',
          type: 'Date'
        },
        deleted: {
          name: 'deleted',
          type: 'Date',
          default: undefined
        },
        id: {
          name: 'id',
          type: 'any'
        },
        assetIds: {
          name: 'assetIds',
          type: 'Array&lt;any&gt;',
          default: []
        },
        projectId: {
          name: 'projectId',
          type: 'any'
        },
      },
      relations: {
        assets: {
          name: 'assets',
          type: 'Asset[]',
          model: 'Asset',
          relationType: 'referencesMany',
          keyFrom: 'assetIds',
          keyTo: 'id'
        },
        eventDashboardEventTriggers: {
          name: 'eventDashboardEventTriggers',
          type: 'any[]',
          model: '',
          relationType: 'hasMany',
          keyFrom: 'id',
          keyTo: 'eventDashboardId'
        },
        eventTriggers: {
          name: 'eventTriggers',
          type: 'EventTrigger[]',
          model: 'EventTrigger',
          relationType: 'hasMany',
          modelThrough: 'EventDashboardEventTrigger',
          keyThrough: 'eventTriggerId',
          keyFrom: 'id',
          keyTo: 'eventDashboardId'
        },
        trackingLogs: {
          name: 'trackingLogs',
          type: 'Log[]',
          model: 'Log',
          relationType: 'hasMany',
          keyFrom: 'id',
          keyTo: 'trackingModelId'
        },
        managers: {
          name: 'managers',
          type: 'Manager[]',
          model: 'Manager',
          relationType: 'hasMany',
          modelThrough: 'ManagerEventDashboard',
          keyThrough: 'managerId',
          keyFrom: 'id',
          keyTo: 'eventDashboardId'
        },
        project: {
          name: 'project',
          type: 'Project',
          model: 'Project',
          relationType: 'belongsTo',
          keyFrom: 'projectId',
          keyTo: 'id'
        },
      }
    };
  }
}
