import {ModelDefinition} from './BaseModels';
import {AssetTemplate} from './AssetTemplate';
import {EventTriggerTemplate} from './EventTriggerTemplate';
import {Log} from './Log';
declare var Object: any;

export interface EventGroupTemplateInterface {
  name: string;
  description?: string;
  color?: string;
  icon?: string;
  priority?: number;
  created?: Date;
  modified?: Date;
  deleted?: Date;
  id?: any;
  assetTemplateId?: any;
  assetTemplate?: AssetTemplate;
  eventTriggerTemplates?: EventTriggerTemplate[];
  trackingLogs?: Log[];
}

export class EventGroupTemplate implements EventGroupTemplateInterface {
  name: string;
  description: string;
  color: string;
  icon: string;
  priority: number;
  created: Date;
  modified: Date;
  deleted: Date;
  id: any;
  assetTemplateId: any;
  assetTemplate?: AssetTemplate;
  eventTriggerTemplates?: EventTriggerTemplate[];
  trackingLogs?: Log[];
  constructor(data?: EventGroupTemplateInterface) {
    Object.assign(this, data);
  }

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

  /**
   * @method factory
   * @author Jonathan Casarrubias
   * @license MIT
   * This method creates an instance of EventGroupTemplate for dynamic purposes.
   */
  public static factory(data: EventGroupTemplateInterface): EventGroupTemplate{
    return new EventGroupTemplate(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: 'EventGroupTemplate',
      plural: 'EventGroupTemplates',
      path: 'EventGroupTemplates',
      idName: 'id',
      properties: {
        name: {
          name: 'name',
          type: 'string'
        },
        description: {
          name: 'description',
          type: 'string'
        },
        color: {
          name: 'color',
          type: 'string'
        },
        icon: {
          name: 'icon',
          type: 'string'
        },
        priority: {
          name: 'priority',
          type: 'number'
        },
        created: {
          name: 'created',
          type: 'Date'
        },
        modified: {
          name: 'modified',
          type: 'Date'
        },
        deleted: {
          name: 'deleted',
          type: 'Date',
          default: undefined
        },
        id: {
          name: 'id',
          type: 'any'
        },
        assetTemplateId: {
          name: 'assetTemplateId',
          type: 'any'
        },
      },
      relations: {
        assetTemplate: {
          name: 'assetTemplate',
          type: 'AssetTemplate',
          model: 'AssetTemplate',
          relationType: 'belongsTo',
          keyFrom: 'assetTemplateId',
          keyTo: 'id'
        },
        eventTriggerTemplates: {
          name: 'eventTriggerTemplates',
          type: 'EventTriggerTemplate[]',
          model: 'EventTriggerTemplate',
          relationType: 'hasMany',
          keyFrom: 'id',
          keyTo: 'eventGroupTemplateId'
        },
        trackingLogs: {
          name: 'trackingLogs',
          type: 'Log[]',
          model: 'Log',
          relationType: 'hasMany',
          keyFrom: 'id',
          keyTo: 'trackingModelId'
        },
      }
    };
  }
}
