using UnityEngine;

namespace Aidlab
{
    public class AidlabDelegate
    {
        public Data.Data1<float> ecg = new Data.Data1<float>("ECG");
        public Data.Data1<float> respiration = new Data.Data1<float>("Respiration");
        public Data.Data1<float> temperature = new Data.Data1<float>("Temperature");
        public Data.Data1<int> battery = new Data.Data1<int>("Battery");
        public Data.Data1<System.UInt64> steps = new Data.Data1<System.UInt64>("Steps");
        public Data.Data1<System.UInt32> respirationRate = new Data.Data1<System.UInt32>("Respiration Rate");
        public Data.Data1<int> heartRate = new Data.Data1<int>("Heart Rate");
        public Data.Data1<int> rr = new Data.Data1<int>("RR");
        public Data.Data1<System.UInt16> soundVolume = new Data.Data1<System.UInt16>("Sound Volume");
        public Data.Data3<float> accelerometer = new Data.Data3<float>("Accelerometer");
        public Data.Data3<float> gyroscope = new Data.Data3<float>("Gyroscope");
        public Data.Data3<float> magnetometer = new Data.Data3<float>("Magnetometer");
        public Data.Data3<float> orientation = new Data.Data3<float>("Orientation");
        public Data.Data1<BodyPosition> bodyPosition = new Data.Data1<BodyPosition>("Body Position");
        public Data.Data4<float, float> quaternion = new Data.Data4<float, float>("Quaternion");
        public Data.Data1<int> pressure = new Data.Data1<int>("Pressure");
        public Data.Data1<byte> signalQuality = new Data.Data1<byte>("Signal Quality");
        public Data.Data1<float> eda = new Data.Data1<float>("EDA");
        public Data.Data6 gps = new Data.Data6("GPS (lat, lon, alt, speed, heading, hdop)");
        /// <summary>
        /// Live events that collect lists and every event read through synchronization; <see cref="DeviceEvent.IsPast"/>
        /// tells them apart.
        /// </summary>
        public Data.Events<DeviceEvent> deviceEvent = new Data.Events<DeviceEvent>();
        public AidlabError error;

        public void DidReceiveECG(System.UInt64 timestamp, float value)
        {
            ecg.ReceiveData(value, timestamp);
        }

        public void DidReceiveRespiration(System.UInt64 timestamp, float value)
        {
            respiration.ReceiveData(value, timestamp);
        }

        public void DidReceiveRespirationRate(System.UInt64 timestamp, System.UInt32 value)
        {
            respirationRate.ReceiveData(value, timestamp);
        }

        public void DidReceiveBatteryLevel(int stateOfCharge)
        {
            battery.ReceiveData(stateOfCharge, 0);
        }

        public void DidReceiveSkinTemperature(System.UInt64 timestamp, float value)
        {
            temperature.ReceiveData(value, timestamp);
        }

        public void DidReceiveAccelerometer(System.UInt64 timestamp, float ax, float ay, float az)
        {
            accelerometer.ReceiveData(ax, ay, az, timestamp);
        }

        public void DidReceiveGyroscope(System.UInt64 timestamp, float gx, float gy, float gz)
        {
            gyroscope.ReceiveData(gx, gy, gz, timestamp);
        }

        public void DidReceiveMagnetometer(System.UInt64 timestamp, float mx, float my, float mz)
        {
            magnetometer.ReceiveData(mx, my, mz, timestamp);
        }

        public void DidReceiveQuaternion(System.UInt64 timestamp, float qw, float qx, float qy, float qz)
        {
            quaternion.ReceiveData(qw, qx, qy, qz, timestamp);
        }

        public void DidReceiveOrientation(System.UInt64 timestamp, float roll, float pitch, float yaw)
        {
            orientation.ReceiveData(roll, pitch, yaw, timestamp);
        }

        public void DidReceiveBodyPosition(System.UInt64 timestamp, BodyPosition bodyPosition)
        {
            this.bodyPosition.ReceiveData(bodyPosition, timestamp);
        }

        public void DidReceiveSteps(System.UInt64 timestamp, System.UInt64 steps)
        {
            this.steps.ReceiveData(steps, timestamp);
        }

        public void DidReceiveHeartRate(System.UInt64 timestamp, int heartRate)
        {
            this.heartRate.ReceiveData(heartRate, timestamp);
        }

        public void DidReceiveRr(System.UInt64 timestamp, int rr)
        {
            this.rr.ReceiveData(rr, timestamp);
        }

        public void DidReceiveSoundVolume(System.UInt64 timestamp, System.UInt16 value)
        {
            soundVolume.ReceiveData(value, timestamp);
        }

        public void DidReceivePressure(System.UInt64 timestamp, int pressure)
        {
            this.pressure.ReceiveData(pressure, timestamp);
        }

        public void DidReceiveSignalQuality(System.UInt64 timestamp, byte value)
        {
            signalQuality.ReceiveData(value, timestamp);
        }

        public void DidReceiveEda(System.UInt64 timestamp, float conductance)
        {
            eda.ReceiveData(conductance, timestamp);
        }

        public void DidReceiveGps(System.UInt64 timestamp, float lat, float lon, float alt, float speed, float heading, float hdop)
        {
            gps.ReceiveData(lat, lon, alt, speed, heading, hdop, timestamp);
        }

        public void DidReceiveEvent(DeviceEvent deviceEvent)
        {
            this.deviceEvent.Receive(deviceEvent);
        }

        public void DidReceiveError(AidlabError error)
        {
            this.error = error;
        }
    }
}
