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

export interface EventSummaryForProjectInterface {
  0?: any;
  1?: any;
  2?: any;
  3?: any;
  4?: any;
  5?: any;
  6?: any;
  7?: any;
  8?: any;
  9?: any;
  10?: any;
  11?: any;
  12?: any;
  13?: any;
  14?: any;
  15?: any;
  16?: any;
  17?: any;
  18?: any;
  19?: any;
  20?: any;
  21?: any;
  22?: any;
  23?: any;
  type: string;
  date: Date;
  from?: Date;
  to?: Date;
  year: number;
  month: number;
  day: number;
  detail: any;
  updated: boolean;
  created?: Date;
  modified?: Date;
  deleted?: Date;
  id?: any;
  projectId?: any;
  eventSummaryForAssets?: EventSummaryForAsset[];
  trackingLogs?: Log[];
  project?: Project;
}

export class EventSummaryForProject implements EventSummaryForProjectInterface {
  0: any;
  1: any;
  2: any;
  3: any;
  4: any;
  5: any;
  6: any;
  7: any;
  8: any;
  9: any;
  10: any;
  11: any;
  12: any;
  13: any;
  14: any;
  15: any;
  16: any;
  17: any;
  18: any;
  19: any;
  20: any;
  21: any;
  22: any;
  23: any;
  type: string;
  date: Date;
  from: Date;
  to: Date;
  year: number;
  month: number;
  day: number;
  detail: any;
  updated: boolean;
  created: Date;
  modified: Date;
  deleted: Date;
  id: any;
  projectId: any;
  eventSummaryForAssets?: EventSummaryForAsset[];
  trackingLogs?: Log[];
  project?: Project;
  constructor(data?: EventSummaryForProjectInterface) {
    Object.assign(this, data);
  }

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

  /**
   * @method factory
   * @author Jonathan Casarrubias
   * @license MIT
   * This method creates an instance of EventSummaryForProject for dynamic purposes.
   */
  public static factory(data: EventSummaryForProjectInterface): EventSummaryForProject{
    return new EventSummaryForProject(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: 'EventSummaryForProject',
      plural: 'EventSummaryForProjects',
      path: 'EventSummaryForProjects',
      idName: 'id',
      properties: {
        0: {
          name: '0',
          type: 'any'
        },
        1: {
          name: '1',
          type: 'any'
        },
        2: {
          name: '2',
          type: 'any'
        },
        3: {
          name: '3',
          type: 'any'
        },
        4: {
          name: '4',
          type: 'any'
        },
        5: {
          name: '5',
          type: 'any'
        },
        6: {
          name: '6',
          type: 'any'
        },
        7: {
          name: '7',
          type: 'any'
        },
        8: {
          name: '8',
          type: 'any'
        },
        9: {
          name: '9',
          type: 'any'
        },
        10: {
          name: '10',
          type: 'any'
        },
        11: {
          name: '11',
          type: 'any'
        },
        12: {
          name: '12',
          type: 'any'
        },
        13: {
          name: '13',
          type: 'any'
        },
        14: {
          name: '14',
          type: 'any'
        },
        15: {
          name: '15',
          type: 'any'
        },
        16: {
          name: '16',
          type: 'any'
        },
        17: {
          name: '17',
          type: 'any'
        },
        18: {
          name: '18',
          type: 'any'
        },
        19: {
          name: '19',
          type: 'any'
        },
        20: {
          name: '20',
          type: 'any'
        },
        21: {
          name: '21',
          type: 'any'
        },
        22: {
          name: '22',
          type: 'any'
        },
        23: {
          name: '23',
          type: 'any'
        },
        type: {
          name: 'type',
          type: 'string'
        },
        date: {
          name: 'date',
          type: 'Date'
        },
        from: {
          name: 'from',
          type: 'Date'
        },
        to: {
          name: 'to',
          type: 'Date'
        },
        year: {
          name: 'year',
          type: 'number'
        },
        month: {
          name: 'month',
          type: 'number'
        },
        day: {
          name: 'day',
          type: 'number'
        },
        detail: {
          name: 'detail',
          type: 'any'
        },
        updated: {
          name: 'updated',
          type: 'boolean'
        },
        created: {
          name: 'created',
          type: 'Date'
        },
        modified: {
          name: 'modified',
          type: 'Date'
        },
        deleted: {
          name: 'deleted',
          type: 'Date',
          default: undefined
        },
        id: {
          name: 'id',
          type: 'any'
        },
        projectId: {
          name: 'projectId',
          type: 'any'
        },
      },
      relations: {
        eventSummaryForAssets: {
          name: 'eventSummaryForAssets',
          type: 'EventSummaryForAsset[]',
          model: 'EventSummaryForAsset',
          relationType: 'hasMany',
          keyFrom: 'id',
          keyTo: 'eventSummaryForProjectId'
        },
        trackingLogs: {
          name: 'trackingLogs',
          type: 'Log[]',
          model: 'Log',
          relationType: 'hasMany',
          keyFrom: 'id',
          keyTo: 'trackingModelId'
        },
        project: {
          name: 'project',
          type: 'Project',
          model: 'Project',
          relationType: 'belongsTo',
          keyFrom: 'projectId',
          keyTo: 'id'
        },
      }
    };
  }
}
