package com.rera.mss.measurement.computingBase

import com.rera.mss.model.Instrument
import com.rera.mss.model.MonitoredArea
import com.rera.mss.service.IrradianceAndEnergy

interface Computer {
    fun computeEnergyFromIrradiance(monitoredArea: MonitoredArea, timeIrradianceData: List<Pair<Long, Float>>, energyOffset: List<Float>): List<Float>
    fun computeInstrumentsEnergyWithUnifiedTimeBase(irradianceAndEnergy: Map<Instrument, IrradianceAndEnergy>, timeBaseStep: Long, bounds: Pair<Long, Long>): Map<Long, List<Pair<Long, Float>>>?
    fun computePerformanceRatio(theoreticalEnergy: Map<Long, List<Pair<Long, Float>>>, realEnergy: List<Pair<Long,Float>>): List<Pair<Long,Float>>
    fun computeBoundsOfTimeInterval(irradianceAndEnergy: Map<Instrument, IrradianceAndEnergy>, realEnergyTimeBase: List<Long>?): Pair<Long, Long>?
}