/* eslint-disable @typescript-eslint/interface-name-prefix */ import { DateTime } from 'luxon' import { FluidType } from 'enum/fluid.enum' //import _ from 'lodash' export interface IDataload { date: DateTime value: number valueDetail?: number[] | null } export interface IPerformanceIndicator { value: number | null compareValue: number | null percentageVariation: number | null } class Dataload implements IDataload { date: DateTime value: number valueDetail?: number[] constructor(date: DateTime, value: number, valueDetail?: number[]) { this.date = date this.value = value this.valueDetail = valueDetail } } export interface IChartData { actualData: IDataload[] comparisonData: IDataload[] | null } export class ChartData implements IChartData { actualData: IDataload[] comparisonData: IDataload[] | null constructor(actualData: IDataload[], comparisonData?: IDataload[]) { this.actualData = actualData if (comparisonData) this.comparisonData = comparisonData else this.comparisonData = null } } export interface ITimePeriod { startDate: DateTime endDate: DateTime } export class TimePeriod implements ITimePeriod { startDate: DateTime endDate: DateTime constructor(startDate: DateTime, endDate: DateTime) { this.startDate = startDate this.endDate = endDate } } export enum TimeStep { HALF_AN_HOUR = 10, HOUR = 15, DAY = 20, WEEK = 30, MONTH = 40, YEAR = 50, } export interface IConsumptionDataManager { getGraphData( timePeriod: ITimePeriod, timeStep: TimeStep, fluidTypes: FluidType[], compareTimePeriod?: ITimePeriod ): Promise<IChartData | null> fetchLastDateData(fluidType: FluidType[]): Promise<DateTime | null> getPerformanceIndicators( timePeriod: ITimePeriod, timeStep: TimeStep, fluidTypes: FluidType[], compareTimePeriod?: ITimePeriod ): Promise<IPerformanceIndicator[]> }