var es = require('../')
  , it = require('it-is').style('colour')
  , d = require('ubelt')

function makeExamplePipe() {

  return es.connect(
    es.map(function (data, callback) {
      callback(null, data * 2)
    }),
    es.map(function (data, callback) {
      d.delay(callback)(null, data)    
    }),
    es.map(function (data, callback) {
      callback(null, data + 2)
    }))
}

exports['simple pipe'] = function (test) {

  var pipe = makeExamplePipe()

  pipe.on('data', function (data) {
    it(data).equal(18)
    test.done()
  })
  
  pipe.write(8)

}

exports['read array then map'] = function (test) {

  var readThis = d.map(3, 6, 100, d.id) //array of multiples of 3 < 100
    , first = es.readArray(readThis)
    , read = []
    , pipe =
  es.connect(
    first,
    es.map(function (data, callback) {
      callback(null, {data: data})      
    }),
    es.map(function (data, callback) {
      callback(null, {data: data})
    }),
    es.writeArray(function (err, array) {
      it(array).deepEqual(d.map(readThis, function (data) {
        return {data: {data: data}}
      }))
      test.done()  
    })
  )
}

exports ['connect returns a stream'] = function (test) {

  var rw = 
    es.connect(
      es.map(function (data, callback) {
        callback(null, data * 2)      
      }),
      es.map(function (data, callback) {
        callback(null, data * 5)      
      })
    )

  it(rw).has({readable: true, writable: true})

  var array = [190, 24, 6, 7, 40, 57, 4, 6]
    , _array = []
    , c = 
  es.connect(
    es.readArray(array),
    rw,
    es.log('after rw:'),
    es.writeArray(function (err, _array) {
      it(_array).deepEqual(array.map(function (e) { return e * 10 }))
      test.done()
    })
    )
  
}
