namespace Aidlab
{
    public class AidlabSyncDelegate
    {
        public Data.Data1<SyncState> syncState = new Data.Data1<SyncState>("Sync State");
        public Data.Data2<uint, float> unsynchronizedSize = new Data.Data2<uint, float>("Unsynchronized Size (count, progress)");

        public Data.Data1<float> pastEcg = new Data.Data1<float>("Past ECG");
        public Data.Data1<float> pastRespiration = new Data.Data1<float>("Past Respiration");
        public Data.Data1<float> pastTemperature = new Data.Data1<float>("Past Temperature");
        public Data.Data1<int> pastHeartRate = new Data.Data1<int>("Past Heart Rate");
        public Data.Data1<int> pastRr = new Data.Data1<int>("Past RR");
        public Data.Data1<ActivityType> pastActivity = new Data.Data1<ActivityType>("Past Activity");
        public Data.Data1<uint> pastRespirationRate = new Data.Data1<uint>("Past Respiration Rate");
        public Data.Data1<ulong> pastSteps = new Data.Data1<ulong>("Past Steps");
        public Data.Data1<ulong> pastUserEvent = new Data.Data1<ulong>("Past User Event");
        public Data.Data1<ushort> pastSoundVolume = new Data.Data1<ushort>("Past Sound Volume");
        public Data.Data1<int> pastPressure = new Data.Data1<int>("Past Pressure");
        public Data.Data3<float> pastAccelerometer = new Data.Data3<float>("Past Accelerometer");
        public Data.Data3<float> pastGyroscope = new Data.Data3<float>("Past Gyroscope");
        public Data.Data4<float, float> pastQuaternion = new Data.Data4<float, float>("Past Quaternion");
        public Data.Data3<float> pastOrientation = new Data.Data3<float>("Past Orientation");
        public Data.Data3<float> pastMagnetometer = new Data.Data3<float>("Past Magnetometer");
        public Data.Data1<BodyPosition> pastBodyPosition = new Data.Data1<BodyPosition>("Past Body Position");
        public Data.Data1<byte> pastSignalQuality = new Data.Data1<byte>("Past Signal Quality");
        public Data.Data1<float> pastEda = new Data.Data1<float>("Past EDA");
        public Data.Data6 pastGps = new Data.Data6("Past GPS (lat, lon, alt, speed, heading, hdop)");

        public void SyncStateDidChange(SyncState state)
        {
            syncState.ReceiveData(state, 0);
        }

        public void DidReceiveUnsynchronizedSize(uint size, float progress)
        {
            unsynchronizedSize.ReceiveData(size, progress, 0);
        }

        public void DidReceivePastEcg(ulong timestamp, float value) => pastEcg.ReceiveData(value, timestamp);
        public void DidReceivePastRespiration(ulong timestamp, float value) => pastRespiration.ReceiveData(value, timestamp);
        public void DidReceivePastTemperature(ulong timestamp, float value) => pastTemperature.ReceiveData(value, timestamp);
        public void DidReceivePastHeartRate(ulong timestamp, int value) => pastHeartRate.ReceiveData(value, timestamp);
        public void DidReceivePastRr(ulong timestamp, int value) => pastRr.ReceiveData(value, timestamp);
        public void DidReceivePastActivity(ulong timestamp, ActivityType value) => pastActivity.ReceiveData(value, timestamp);
        public void DidReceivePastRespirationRate(ulong timestamp, uint value) => pastRespirationRate.ReceiveData(value, timestamp);
        public void DidReceivePastSteps(ulong timestamp, ulong value) => pastSteps.ReceiveData(value, timestamp);
        public void DidReceivePastUserEvent(ulong timestamp) => pastUserEvent.ReceiveData(timestamp, timestamp);
        public void DidReceivePastSoundVolume(ulong timestamp, ushort value) => pastSoundVolume.ReceiveData(value, timestamp);
        public void DidReceivePastPressure(ulong timestamp, int value) => pastPressure.ReceiveData(value, timestamp);
        public void DidReceivePastAccelerometer(ulong timestamp, float ax, float ay, float az) => pastAccelerometer.ReceiveData(ax, ay, az, timestamp);
        public void DidReceivePastGyroscope(ulong timestamp, float gx, float gy, float gz) => pastGyroscope.ReceiveData(gx, gy, gz, timestamp);
        public void DidReceivePastQuaternion(ulong timestamp, float qw, float qx, float qy, float qz) => pastQuaternion.ReceiveData(qw, qx, qy, qz, timestamp);
        public void DidReceivePastOrientation(ulong timestamp, float roll, float pitch, float yaw) => pastOrientation.ReceiveData(roll, pitch, yaw, timestamp);
        public void DidReceivePastMagnetometer(ulong timestamp, float mx, float my, float mz) => pastMagnetometer.ReceiveData(mx, my, mz, timestamp);
        public void DidReceivePastBodyPosition(ulong timestamp, BodyPosition value) => pastBodyPosition.ReceiveData(value, timestamp);
        public void DidReceivePastSignalQuality(ulong timestamp, byte value) => pastSignalQuality.ReceiveData(value, timestamp);
        public void DidReceivePastEda(ulong timestamp, float conductance) => pastEda.ReceiveData(conductance, timestamp);
        public void DidReceivePastGps(ulong timestamp, float lat, float lon, float alt, float speed, float heading, float hdop) =>
            pastGps.ReceiveData(lat, lon, alt, speed, heading, hdop, timestamp);
    }
}
