// Mongoose OS DHT library API. Source C API is defined at:
// [mgos_dht.h](https://github.com/mongoose-os-libs/dht/tree/master/src/mgos_dht.h)

let DHT = {
  _crt: ffi('void *mgos_dht_create(int, int)'),
  _cls: ffi('void mgos_dht_close(void *)'),
  _gt: ffi('float mgos_dht_get_temp(void *)'),
  _gh: ffi('float mgos_dht_get_humidity(void *)'),

  // Define type of sensors.
  DHT11: 11,
  DHT21: 21,
  AM2301: 21,
  DHT22: 22,
  AM2302: 22,

  // **`DHT.create(pin, type)`**
  // Create a DHT object. `type` could be `DHT.DHT11`, `DHT.DHT21`,
  // `DHT.DHT22`. Return value: an object with the methods described below, or
  // 'null' in case of a failure.
  // Example:
  // ```javascript
  // let mydht = DHT.create(5, DHT.DHT11);
  // print('Temperature:', mydht.getTemp());
  // ```
  create: function(pin, type) {
    let obj = Object.create(DHT._proto);
    obj.dht = DHT._crt(pin, type);
    return obj;
  },

  _proto: {
    // **`mydht.close()`**
    // Close DHT handle. Return value: none.
    close: function() {
      return DHT._cls(this.dht);
    },

    // **`mydht.getTemp()`**
    // Return temperature in degrees C or 'NaN' in case of a failure.
    getTemp: function() {
      return DHT._gt(this.dht);
    },

    // **`mydht.getHumidity()`**
    // Return humidity in RH% or 'NaN' in case of a failure.
    getHumidity: function() {
      return DHT._gh(this.dht);
    },
  },
};
