/* tslint:disable:max-classes-per-file */
/* tslint:disable:variable-name */
/* tslint:disable:no-trailing-whitespace */
/* tslint:disable:no-consecutive-blank-lines */
/* tslint:disable:no-namespace */
/* tslint:disable:member-access */
/* tslint:disable:typedef-whitespace */
/* tslint:disable:no-internal-module */

declare module EVA.BI {
  
  export enum AggregationTypes {
    Sum = 0,
    WeightedAverage = 1,
    SumLast = 2,
  }
  
  export class DataResponse {
    Name : string; 
    Label : string; 
    OrganizationUnitID? : number; // Int32, nullable
    OrganizationUnitName : string; 
    Series : EVA.BI.Series; 
    Actual : number; // Decimal
    Target? : number; // Decimal, nullable
    Points : EVA.BI.Point[]; 
  }
  
  export class GetData extends EVA.API.RequestMessageGeneric<EVA.BI.GetDataResponse> {
    OrganizationUnitID : number; // Int32
    Labels : string[]; 
    Timeframe : EVA.BI.Timeframe; 
    Series : EVA.BI.Series[]; 
    GroupBy : EVA.BI.GroupBy; 
    Mock? : boolean; 
  }
  
  export class GetDataResponse extends EVA.API.GetListResponse<EVA.BI.DataResponse> {
  }
  
  export class GetLabels extends EVA.API.RequestMessageGeneric<EVA.BI.GetLabelsResponse> {
  }
  
  export class GetLabelsResponse extends EVA.API.GetListResponse<EVA.BI.Label> {
  }
  
  export class GetStoresForUser extends EVA.API.RequestMessageGeneric<EVA.BI.GetStoresForUserResponse> {
  }
  
  export class GetStoresForUserResponse extends EVA.API.ResponseMessage {
    Root : EVA.BI.GetStoresForUserResponseOrganizationUnit; 
  }
  
  export enum Grain {
    None = 0,
    Days = 1,
    Weeks = 2,
    Months = 3,
  }
  
  export enum GroupBy {
    Label = 0,
    OrganizationUnit = 1,
    Name = 2,
  }
  
  export class Label {
    Name : string; 
    AggregationType : EVA.BI.AggregationTypes; 
  }
  
  export class GetStoresForUserResponseOrganizationUnit {
    ID : number; // Int32
    Name : string; 
    TypeID : EVA.BI.Type; 
    ViewReports : boolean; 
    Children : EVA.BI.GetStoresForUserResponseOrganizationUnit[]; 
  }
  
  export class Point {
    Label : string; 
    Value : number; // Decimal
    Target? : number; // Decimal, nullable
    AccumulatedValue : number; // Decimal
  }
  
  export enum Series {
    Actual = 0,
    LFL = 1,
  }
  
  export class Timeframe {
    Period : any; 
    Range : any; 
    Date? : string; // DateTime, nullable
  }
  
  export enum Type {
    None = 0,
    Shop = 1,
    City = 2,
    Region = 3,
    Country = 4,
    Root = 5,
  }
  
}