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

export interface ProjectOperabilitySummaryInterface {
  month?: Date;
  totalOperativeAssets?: number;
  connectedAssetsEndPeriod?: number;
  connectedAssetsStartPeriod?: number;
  connectedAssets?: number;
  disconnectedAssets?: number;
  createdAssets?: number;
  removedAssets?: number;
  totalOperativeHours?: number;
  adjustedOperativeHours?: number;
  maxOperativeHours?: number;
  operability?: number;
  averageOperability?: number;
  created?: Date;
  modified?: Date;
  deleted?: Date;
  id?: any;
  projectId?: any;
  trackingLogs?: Log[];
  project?: Project;
}

export class ProjectOperabilitySummary implements ProjectOperabilitySummaryInterface {
  month: Date;
  totalOperativeAssets: number;
  connectedAssetsEndPeriod: number;
  connectedAssetsStartPeriod: number;
  connectedAssets: number;
  disconnectedAssets: number;
  createdAssets: number;
  removedAssets: number;
  totalOperativeHours: number;
  adjustedOperativeHours: number;
  maxOperativeHours: number;
  operability: number;
  averageOperability: number;
  created: Date;
  modified: Date;
  deleted: Date;
  id: any;
  projectId: any;
  trackingLogs?: Log[];
  project?: Project;
  constructor(data?: ProjectOperabilitySummaryInterface) {
    Object.assign(this, data);
  }

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

  /**
   * @method factory
   * @author Jonathan Casarrubias
   * @license MIT
   * This method creates an instance of ProjectOperabilitySummary for dynamic purposes.
   */
  public static factory(data: ProjectOperabilitySummaryInterface): ProjectOperabilitySummary{
    return new ProjectOperabilitySummary(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: 'ProjectOperabilitySummary',
      plural: 'ProjectOperabilitySummaries',
      path: 'ProjectOperabilitySummaries',
      idName: 'id',
      properties: {
        month: {
          name: 'month',
          type: 'Date'
        },
        totalOperativeAssets: {
          name: 'totalOperativeAssets',
          type: 'number'
        },
        connectedAssetsEndPeriod: {
          name: 'connectedAssetsEndPeriod',
          type: 'number'
        },
        connectedAssetsStartPeriod: {
          name: 'connectedAssetsStartPeriod',
          type: 'number'
        },
        connectedAssets: {
          name: 'connectedAssets',
          type: 'number'
        },
        disconnectedAssets: {
          name: 'disconnectedAssets',
          type: 'number'
        },
        createdAssets: {
          name: 'createdAssets',
          type: 'number'
        },
        removedAssets: {
          name: 'removedAssets',
          type: 'number'
        },
        totalOperativeHours: {
          name: 'totalOperativeHours',
          type: 'number'
        },
        adjustedOperativeHours: {
          name: 'adjustedOperativeHours',
          type: 'number'
        },
        maxOperativeHours: {
          name: 'maxOperativeHours',
          type: 'number'
        },
        operability: {
          name: 'operability',
          type: 'number'
        },
        averageOperability: {
          name: 'averageOperability',
          type: 'number'
        },
        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: {
        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'
        },
      }
    };
  }
}
