import { ITimePeriod, TimeStep } from './dataConsumptionContracts' import { FluidType } from 'enum/fluid.enum' import { Interval } from 'luxon' export default class ConsumptionDataValidator { public ValidateGetGraphData( timePeriod: ITimePeriod, timeStep: TimeStep, fluidTypes: FluidType[], compareTimePeriod?: ITimePeriod ): boolean { if (fluidTypes.length === 0) return false if (!this.ValidateTimePeriod(timePeriod)) return false for (const fluidType of fluidTypes) { if ( timeStep === TimeStep.HALF_AN_HOUR && fluidType !== FluidType.ELECTRICITY ) return false if (timeStep === TimeStep.HOUR && fluidType !== FluidType.GAS) return false } if (!this.ValidateTimePeriodLength(timePeriod, timeStep)) return false if (compareTimePeriod) { if (!this.ValidateTimePeriod(compareTimePeriod)) return false if (!this.ValidateTimePeriodLength(compareTimePeriod, timeStep)) return false } return true } private ValidateTimePeriodLength( timePeriod: ITimePeriod, timeStep: TimeStep ): boolean { const interval = Interval.fromDateTimes( timePeriod.startDate, timePeriod.endDate ) if (timeStep == TimeStep.HALF_AN_HOUR && interval.length('hour') > 24) return false if (timeStep == TimeStep.DAY && interval.length('day') > 31) return false if (timeStep == TimeStep.MONTH && interval.length('month') > 12) return false if (timeStep == TimeStep.YEAR && interval.length('year') > 10) return false return true } private ValidateTimePeriod(timePeriod: ITimePeriod): boolean { return timePeriod.endDate >= timePeriod.startDate } }