/**
* @ requires
*/
var request            = require('./http.js').request,
    makeTriggerOptions = require('./utils.js').makeTriggerOptions,
    defaultDataFormat  = require('../include/meta.js').defaultDataFormat;

/**
* Create an instance of Trigger
*
* @constructor {Trigger}
* @this        {Trigger}
* @param       {string}  masterApikey Your pachube api key.
*/
function Trigger(masterApikey) {
  /** @private */this.masterApiKey = masterApikey;
}


/**
* List triggers: GET /v2/triggers
*
* @this  {Trigger}
* @param {function} callback The callback function.
* @param {string}   optionalDataFormat Optional data format parameter, json or xml, default to json.
*/
Trigger.prototype.list = function(callback, optionalDataFormat) {
  var options          = makeTriggerOptions('GET');
  var dataFormat       = optionalDataFormat || defaultDataFormat;
  request(this.masterApiKey, options, callback, dataFormat);
};


/**
* Create trigger: POST /v2/triggers
*
* @this  {Trigger}
* @param {string}   dataSource The data source, a path, a string or an object.
* @param {function} callback The callback function.
* @param {string}   optionalDataFormat Optional data format parameter, json or xml, default to json.
*/
Trigger.prototype.create = function(dataSource, callback, optionalDataFormat) {
  var options            = makeTriggerOptions('POST');
  var dataFormat         = optionalDataFormat || defaultDataFormat;
  request(this.masterApiKey, options, callback, dataFormat, dataSource);
};


/**
* Delete trigger: DELETE /v2/triggers/<trigger_id>
*
* @this {Trigger}
* @param {string} triggerID The trigger id.
* @param {function} callback Optional callback function.
*/
Trigger.prototype.delete = function(triggerID, callback) {
  var options            = makeTriggerOptions('DELETE', triggerID);
  request(this.masterApiKey, options, callback);
};


/**
* @ exports
*/
module.exports = Trigger;