/*
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
 */

package com.visionHeavyMachines.processors;

import com.visionHeavyMachines.objects.SensorDataAo;
import oracle.iot.analytics.DataOutput;
import oracle.iot.analytics.Link;
import oracle.iot.analytics.StreamingAnalyticsProcessor;
import oracle.yellow.iron.machine.data.attributes.Data;
import org.apache.spark.streaming.api.java.JavaDStream;

import javax.inject.Inject;

/**
 * This class fetches the raw events from device message link and put it in the NoSQL link for further batch
 * processing like hourly kpi computation, Training and scoring
 */
public final class SensorDataCollectorSAP implements StreamingAnalyticsProcessor {

    @Inject
    @Link("sensor-data-dml")
    private JavaDStream<oracle.yellow.iron.machine.data.attributes.DATAMessage> input_sensordatadml;

    @Inject
    @Link("sensor-data-nosql")
    private DataOutput<SensorDataAo> output_sensordatanosql;


    @Override
    public void setup() {
        JavaDStream<SensorDataAo> SensorDataAOJavaDStream = input_sensordatadml
                .map(event -> {
                    Data data = event.getPayload().getData();
                    return new SensorDataAo(
                            data.getFuelLevel(),
                            data.getEngineTemp(),
                            data.getEngineOilPressure(),
                            data.getHydraulicPressure(),
                            data.getEngineVibration(),
                            data.getOraLatitude(),
                            data.getOraLongitude(),
                            data.getFuelConsumptionIncrement(),
                            data.getWorkingHoursIncrement(),
                            data.getIdleHoursIncrement(),
                            event.getSource(),
                            event.getEventTime(),
                            data.getModelId()
                    );
                });

        output_sensordatanosql.write(SensorDataAOJavaDStream);
    }
}
