// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Syncbase data model for Sensor Log.
//
// Every type <T> stored in Syncbase is defined as a pair of types, K<T> and
// V<T>, representing data stored in the key and value, respectively, in a
// single table. K<T> types satisfy the PersistentDataKey interface, supporting
// conversion to and from the row key.
package sbmodel

import (
  "time"
)

// devicecfg : <DevId>
// Measuring device handle. Master only.
type VDeviceCfg struct {
  // Human-readable, not necessarily unique description of the device.
  Desc string
  // Syncbase instance publishing the syncgroup created by the device.
  SgPublishSb string
}

type KDeviceCfg struct {
  DevId string
}

// streamdef : <DevId>/<StreamId>
// Configures a stream of data to be measured.
type VStreamDef struct {
  // Human-readable, not necessarily unique description of the stream.
  Desc string
  // Sampling configuration.
  Sampler SamplerDef
  // Flag to start and stop sampling.
  Enabled bool
}

type KStreamDef struct {
  DevId    string
  StreamId string
}

// Sampling script and polling frequency.
type SamplerDef struct {
  // Shell script executed after every Interval, starting from Start.
  // It should output a single data point, if available. A non-zero exit
  // status or failure to parse the value will produce an error instead.
  Script   string
  Start    time.Time
  Interval time.Duration
  // TODO(ivanpi): Add timeout.
}

// sdata : <DevId>/<StreamId>/<Timestamp>
// Measured data value or error.
type KDataPoint struct {
  DevId     string
  StreamId  string
  Timestamp time.Time
}

type VDataPoint union {
  Value float64
  Error string
}
